annotate vidix/sis_vid.c @ 32676:db882cd69776

Do not #define _WIN32 on the command line for Cygwin. Newer Cygwin versions no longer do this and hopefully we should be able to survive without this hack as well. This change necessitates adapting two #ifdefs in the MPlayer codebase. It is committed untested as I do not have access to a Cygwin system.
author diego
date Thu, 06 Jan 2011 12:42:59 +0000
parents 72e4e8f983f9
children 945eab072c9d
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
30551
36818ea5ce95 Add header file for sis_init_video_bridge() instead of forward declaring it.
diego
parents: 29263
diff changeset
40 #include "sis_bridge.h"
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
41 #include "sis_regs.h"
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
42 #include "sis_defs.h"
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
45 /** Random defines **/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
46
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
47 #define WATCHDOG_DELAY 500000 /* Watchdog counter for retrace waiting */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
48 #define IMAGE_MIN_WIDTH 32 /* Min and max source image sizes */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
49 #define IMAGE_MIN_HEIGHT 24
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
50 #define IMAGE_MAX_WIDTH 720
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
51 #define IMAGE_MAX_HEIGHT 576
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
52 #define IMAGE_MAX_WIDTH_M650 1920
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
53 #define IMAGE_MAX_HEIGHT_M650 1080
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
54
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
55 #define OVERLAY_MIN_WIDTH 32 /* Minimum overlay sizes */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
56 #define OVERLAY_MIN_HEIGHT 24
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
57
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
58 #define DISPMODE_SINGLE1 0x1 /* TW: CRT1 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
59 #define DISPMODE_SINGLE2 0x2 /* TW: CRT2 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
60 #define DISPMODE_MIRROR 0x4 /* TW: CRT1 + CRT2 MIRROR */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
61
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
62 #define VMODE_INTERLACED 0x1
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
63 #define VMODE_DOUBLESCAN 0x2
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
64
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
65 typedef struct {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
66 short x1, y1, x2, y2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
67 } BoxRec;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
68
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
69 typedef struct {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
70 int pixelFormat;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
71
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
72 uint16_t pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
73 uint16_t origPitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
74
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
75 uint8_t keyOP;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
76 uint16_t HUSF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
77 uint16_t VUSF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
78 uint8_t IntBit;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
79 uint8_t wHPre;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
80
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
81 uint16_t srcW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
82 uint16_t srcH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
83
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
84 BoxRec dstBox;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
85
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
86 uint32_t PSY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
87 uint32_t PSV;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
88 uint32_t PSU;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
89 uint8_t bobEnable;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
90
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
91 uint8_t contrastCtrl;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
92 uint8_t contrastFactor;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
93
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
94 uint8_t lineBufSize;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
95
30975
72e4e8f983f9 VBlankActiveFunc is a pointer to a parameterless function; mark it as such.
diego
parents: 30551
diff changeset
96 uint8_t(*VBlankActiveFunc)(void);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
97
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
98 uint16_t SCREENheight;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
99
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
100 } SISOverlayRec, *SISOverlayPtr;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
103 /** static variable definitions **/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
104 static int sis_probed = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
105 static pciinfo_t pci_info;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
106 unsigned int sis_verbose = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
107
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
108 static void *sis_mem_base;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
109 /* static void *sis_reg_base; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
110 unsigned short sis_iobase;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
111
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
112 unsigned int sis_vga_engine = UNKNOWN_VGA;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
113 static unsigned int sis_displaymode = DISPMODE_SINGLE1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
114 static unsigned int sis_has_two_overlays = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
115 static unsigned int sis_bridge_is_slave = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
116 static unsigned int sis_shift_value = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
117 static unsigned int sis_vmode = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
118 unsigned int sis_vbflags = DISPTYPE_DISP1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
119 unsigned int sis_overlay_on_crt1 = 1;
22867
d76307ffcb77 killed warnings in sis driver
ben
parents: 22858
diff changeset
120 int sis_crt1_off = -1;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
121 unsigned int sis_detected_crt2_devices;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
122 unsigned int sis_force_crt2_type = CRT2_DEFAULT;
22867
d76307ffcb77 killed warnings in sis driver
ben
parents: 22858
diff changeset
123 int sis_device_id = -1;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
124
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
125 static int sis_format;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
126 static int sis_Yoff = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
127 static int sis_Voff = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
128 static int sis_Uoff = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
129 static int sis_screen_width = 640;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
130 static int sis_screen_height = 480;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
131
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
132 static int sis_frames[VID_PLAY_MAXFRAMES];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
133
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
134 static vidix_grkey_t sis_grkey;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
135
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
136 static vidix_capability_t sis_cap = {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
137 "SiS 300/310/325 Video Driver",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
138 "Jake Page",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
139 TYPE_OUTPUT,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
140 {0, 0, 0, 0},
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 2048,
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 4,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
145 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
146 FLAG_UPSCALER | FLAG_DOWNSCALER | FLAG_EQUALIZER,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
147 VENDOR_SIS,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
148 -1,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
149 {0, 0, 0, 0}
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
150 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
151
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
152 static vidix_video_eq_t sis_equal = {
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
153 VEQ_CAP_BRIGHTNESS | VEQ_CAP_CONTRAST,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
154 200, 0, 0, 0, 0, 0, 0, 0
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
157 static unsigned short sis_card_ids[] = {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
158 DEVICE_SIS_300,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
159 DEVICE_SIS_315H,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
160 DEVICE_SIS_315,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
161 DEVICE_SIS_315PRO,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
162 DEVICE_SIS_330,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
163 DEVICE_SIS_540_VGA,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
164 DEVICE_SIS_550_VGA,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
165 DEVICE_SIS_630_VGA,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
166 DEVICE_SIS_650_VGA
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
167 };
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
168
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
169 /** function declarations **/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
170
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
171 static void set_overlay(SISOverlayPtr pOverlay, int index);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
172 static void close_overlay(void);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
173 static void calc_scale_factor(SISOverlayPtr pOverlay,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
174 int index, int iscrt2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
175 static void set_line_buf_size(SISOverlayPtr pOverlay);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
176 static void merge_line_buf(int enable);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
177 static void set_format(SISOverlayPtr pOverlay);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
178 static void set_colorkey(void);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
179
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
180 static void set_brightness(uint8_t brightness);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
181 static void set_contrast(uint8_t contrast);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
182 static void set_saturation(char saturation);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
183 static void set_hue(uint8_t hue);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
184
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
185 /* IO Port access functions */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
186 static uint8_t getvideoreg(uint8_t reg)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
187 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
188 uint8_t ret;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
189 inSISIDXREG(SISVID, reg, ret);
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
190 return ret;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
191 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
192
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
193 static void setvideoreg(uint8_t reg, uint8_t data)
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 outSISIDXREG(SISVID, reg, 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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
198 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
199 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
200 uint8_t old;
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 inSISIDXREG(SISVID, reg, old);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
203 data = (data & mask) | (old & (~mask));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
204 outSISIDXREG(SISVID, reg, data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
205 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
206
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
207 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
208 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
209 uint8_t old;
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 inSISIDXREG(SISSR, reg, old);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
212 data = (data & mask) | (old & (~mask));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
213 outSISIDXREG(SISSR, reg, data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
214 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
215
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
216 /* vblank checking*/
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
217 static uint8_t vblank_active_CRT1(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
218 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
219 /* this may be too simplistic? */
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
220 return inSISREG(SISINPSTAT) & 0x08;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
221 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
222
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
223 static uint8_t vblank_active_CRT2(void)
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 uint8_t ret;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
226 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
227 inSISIDXREG(SISPART1, Index_310_CRT2_FC_VR, ret);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
228 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
229 inSISIDXREG(SISPART1, Index_CRT2_FC_VR, ret);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
230 }
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
231 return (ret & 0x02) ^ 0x02;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
232 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
233
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
234 static int find_chip(unsigned chip_id)
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 unsigned i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
237 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
238 if (chip_id == sis_card_ids[i])
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
239 return i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
240 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
241 return -1;
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
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
244 static int sis_probe(int verbose, int force)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
245 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
246 pciinfo_t lst[MAX_PCI_DEVICES];
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
247 unsigned i, num_pci;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
248 int err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
249
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
250 sis_verbose = verbose;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
251 force = force;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
252 err = pci_scan(lst, &num_pci);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
253 if (err) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
254 printf("[SiS] Error occurred during pci scan: %s\n", strerror(err));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
255 return err;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
256 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
257 err = ENXIO;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
258 for (i = 0; i < num_pci; i++) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
259 if (lst[i].vendor == VENDOR_SIS) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
260 int idx;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
261 const char *dname;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
262 idx = find_chip(lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
263 if (idx == -1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
264 continue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
265 dname = pci_device_name(VENDOR_SIS, lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
266 dname = dname ? dname : "Unknown chip";
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
267 if (sis_verbose > 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
268 printf("[SiS] Found chip: %s (0x%X)\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
269 dname, lst[i].device);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
270 sis_device_id = sis_cap.device_id = lst[i].device;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
271 err = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
272 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
273
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
274 sis_has_two_overlays = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
275 switch (sis_cap.device_id) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
276 case DEVICE_SIS_300:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
277 case DEVICE_SIS_630_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
278 sis_has_two_overlays = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
279 case DEVICE_SIS_540_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
280 sis_vga_engine = SIS_300_VGA;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
281 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
282 case DEVICE_SIS_330:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
283 case DEVICE_SIS_550_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
284 sis_has_two_overlays = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
285 case DEVICE_SIS_315H:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
286 case DEVICE_SIS_315:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
287 case DEVICE_SIS_315PRO:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
288 case DEVICE_SIS_650_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
289 /* M650 & 651 have 2 overlays */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
290 /* 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
291 if (enable_app_io() == 0 )
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
292 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
293 unsigned char CR5F;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
294 unsigned char tempreg1, tempreg2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
295
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
296 inSISIDXREG(SISCR, 0x5F, CR5F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
297 CR5F &= 0xf0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
298 andSISIDXREG(SISCR, 0x5c, 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
299 inSISIDXREG(SISCR, 0x5c, tempreg1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
300 tempreg1 &= 0xf8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
301 setSISIDXREG(SISCR, 0x5c, 0x07, 0xf8);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
302 inSISIDXREG(SISCR, 0x5c, tempreg2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
303 tempreg2 &= 0xf8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
304 if ((!tempreg1) || (tempreg2)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
305 if (CR5F & 0x80) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
306 sis_has_two_overlays = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
307 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
308 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
309 sis_has_two_overlays = 1; /* ? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
310 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
311 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
312 if (sis_verbose > 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
313 printf
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
314 ("[SiS] detected M650/651 with 2 overlays\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
315 }
23260
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
316 disable_app_io();
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
317 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
318 sis_vga_engine = SIS_315_VGA;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
319 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
320 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
321 /* should never get here */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
322 sis_vga_engine = UNKNOWN_VGA;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
323 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
324 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
325 }
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 if (err && sis_verbose) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
329 printf("[SiS] Can't find chip\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
330 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
331 sis_probed = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
332 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
333
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
334 return err;
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
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
337 static int sis_init(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
338 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
339 uint8_t sr_data, cr_data, cr_data2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
340 char *env_overlay_crt;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
341
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
342 if (!sis_probed) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
343 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
344 return EINTR;
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
345 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
346
23260
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
347 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
348 {
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
349 printf("[SiS] can't enable register I/O\n");
26753
502f04b67653 cosmetics: Remove useless parentheses from return statements.
diego
parents: 26719
diff changeset
350 return EINTR;
23260
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
351 }
427075ffb413 allow sis vidix driver to access registers and avoid segfaulting (patch by Andrew Calkin)
ben
parents: 23048
diff changeset
352
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
353 /* 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
354 /* map 16MB scary hack for now. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
355 sis_mem_base = map_phys_mem(pci_info.base0, 0x1000000);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
356 /* sis_reg_base = map_phys_mem(pci_info.base1, 0x20000); */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
357 sis_iobase = pci_info.base2 & 0xFFFC;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
358
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
359 /* 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
360 current resolution. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
361 inSISIDXREG(SISCR, 0x12, cr_data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
362 inSISIDXREG(SISCR, 0x07, cr_data2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
363 sis_screen_height =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
364 ((cr_data & 0xff) | ((uint16_t) (cr_data2 & 0x02) << 7) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
365 ((uint16_t) (cr_data2 & 0x40) << 3) | ((uint16_t) (cr_data & 0x02)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
366 << 9)) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
367
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
368 inSISIDXREG(SISSR, 0x0b, sr_data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
369 inSISIDXREG(SISCR, 0x01, cr_data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
370 sis_screen_width = (((cr_data & 0xff) |
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
371 ((uint16_t) (sr_data & 0x0C) << 6)) + 1) * 8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
372
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
373 inSISIDXREG(SISSR, Index_SR_Graphic_Mode, sr_data);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
374 if (sr_data & 0x20) /* interlaced mode */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
375 sis_vmode |= VMODE_INTERLACED;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
376
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
377 /* 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
378 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
379 since it requires a very new and not widely distributed version. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
380 sis_init_video_bridge();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
381
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
382 env_overlay_crt = getenv("VIDIX_CRT");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
383 if (env_overlay_crt) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
384 int crt = atoi(env_overlay_crt);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
385 if (crt == 1 || crt == 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
386 sis_overlay_on_crt1 = (crt == 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
387 if (sis_verbose > 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
388 printf
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
389 ("[SiS] override: using overlay on CRT%d from VIDIX_CRT\n",
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
390 crt);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
391 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
392 }
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 return 0;
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
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
398 static void sis_destroy(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
399 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
400 /* unmap_phys_mem(sis_reg_base, 0x20000); */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
401 /* JCP: see above, hence also a hack. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
402 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
403 disable_app_io();
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
404 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
405
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
406 static int sis_get_caps(vidix_capability_t * to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
407 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
408 memcpy(to, &sis_cap, sizeof(vidix_capability_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
409 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
410 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
411
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
412 static int is_supported_fourcc(uint32_t fourcc)
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 switch (fourcc) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
415 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
416 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
417 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
418 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
419 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
420 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
421 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
422 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
423 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
424 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
425 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
426
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
427 static int sis_query_fourcc(vidix_fourcc_t * to)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
428 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
429 if (is_supported_fourcc(to->fourcc)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
430 to->depth = VID_DEPTH_8BPP | VID_DEPTH_16BPP | VID_DEPTH_32BPP;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
431 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
432 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
433 } else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
434 to->depth = to->flags = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
435 return ENOSYS;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
436 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
437
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
438 static int bridge_in_slave_mode(void)
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 unsigned char usScratchP1_00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
441
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
442 if (!(sis_vbflags & VB_VIDEOBRIDGE))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
443 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
444
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
445 inSISIDXREG(SISPART1, 0x00, usScratchP1_00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
446 if (((sis_vga_engine == SIS_300_VGA)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
447 && (usScratchP1_00 & 0xa0) == 0x20)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
448 || ((sis_vga_engine == SIS_315_VGA)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
449 && (usScratchP1_00 & 0x50) == 0x10)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
450 return 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
451 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
452 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
453 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
454 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
455
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
456 /* 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
457 and 2) it doesn't make sense for other gfx drivers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
458 static void set_dispmode(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
459 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
460 sis_bridge_is_slave = 0;
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 if (bridge_in_slave_mode())
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
463 sis_bridge_is_slave = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
464
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
465 if ((sis_vbflags & VB_DISPMODE_MIRROR) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
466 (sis_bridge_is_slave && (sis_vbflags & DISPTYPE_DISP2))) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
467 if (sis_has_two_overlays)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
468 sis_displaymode = DISPMODE_MIRROR; /* TW: CRT1+CRT2 (2 overlays) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
469 else if (!sis_overlay_on_crt1)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
470 sis_displaymode = DISPMODE_SINGLE2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
471 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
472 sis_displaymode = DISPMODE_SINGLE1;
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 if (sis_vbflags & DISPTYPE_DISP1) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
475 sis_displaymode = DISPMODE_SINGLE1; /* TW: CRT1 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
476 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
477 sis_displaymode = DISPMODE_SINGLE2; /* TW: CRT2 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
478 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
479 }
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 static void set_disptype_regs(void)
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 switch (sis_displaymode) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
485 case DISPMODE_SINGLE1: /* TW: CRT1 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
486 if (sis_verbose > 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
487 printf("[SiS] Setting up overlay on CRT1\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
488 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
489 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
490 setsrregmask(0x06, 0x00, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
491 setsrregmask(0x32, 0x00, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
492 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
493 setsrregmask(0x06, 0x00, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
494 setsrregmask(0x32, 0x00, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
495 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
496 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
497 case DISPMODE_SINGLE2: /* TW: CRT2 only */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
498 if (sis_verbose > 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
499 printf("[SiS] Setting up overlay on CRT2\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
500 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
501 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
502 setsrregmask(0x06, 0x80, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
503 setsrregmask(0x32, 0x80, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
504 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
505 setsrregmask(0x06, 0x40, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
506 setsrregmask(0x32, 0x40, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
507 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
508 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
509 case DISPMODE_MIRROR: /* TW: CRT1 + CRT2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
510 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
511 if (sis_verbose > 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
512 printf("[SiS] Setting up overlay on CRT1 AND CRT2!\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
513 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
514 setsrregmask(0x06, 0x80, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
515 setsrregmask(0x32, 0x80, 0xc0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
516 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
517 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
518 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
519
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
520 static void init_overlay(void)
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 /* Initialize first overlay (CRT1) */
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 /* Write-enable video registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
525 setvideoregmask(Index_VI_Control_Misc2, 0x80, 0x81);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
526
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
527 /* Disable overlay */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
528 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
529
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
530 /* Disable bobEnable */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
531 setvideoregmask(Index_VI_Control_Misc1, 0x02, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
532
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
533 /* Reset scale control and contrast */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
534 setvideoregmask(Index_VI_Scale_Control, 0x60, 0x60);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
535 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, 0x04, 0x1F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
536
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
537 setvideoreg(Index_VI_Disp_Y_Buf_Preset_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
538 setvideoreg(Index_VI_Disp_Y_Buf_Preset_Middle, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
539 setvideoreg(Index_VI_UV_Buf_Preset_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
540 setvideoreg(Index_VI_UV_Buf_Preset_Middle, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
541 setvideoreg(Index_VI_Disp_Y_UV_Buf_Preset_High, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
542 setvideoreg(Index_VI_Play_Threshold_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
543 setvideoreg(Index_VI_Play_Threshold_High, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
544
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
545 /* 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
546 values by app? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
547 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
548 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, 0x04, 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
549 setvideoreg(Index_VI_Brightness, 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
550 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
551 setvideoreg(Index_VI_Hue, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
552 setvideoreg(Index_VI_Saturation, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
553 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
554
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
555 /* Initialize second overlay (CRT2) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
556 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
557 /* Write-enable video registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
558 setvideoregmask(Index_VI_Control_Misc2, 0x81, 0x81);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
559
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
560 /* Disable overlay */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
561 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
562
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
563 /* Disable bobEnable */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
564 setvideoregmask(Index_VI_Control_Misc1, 0x02, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
565
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
566 /* Reset scale control and contrast */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
567 setvideoregmask(Index_VI_Scale_Control, 0x60, 0x60);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
568 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, 0x04, 0x1F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
569
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
570 setvideoreg(Index_VI_Disp_Y_Buf_Preset_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
571 setvideoreg(Index_VI_Disp_Y_Buf_Preset_Middle, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
572 setvideoreg(Index_VI_UV_Buf_Preset_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
573 setvideoreg(Index_VI_UV_Buf_Preset_Middle, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
574 setvideoreg(Index_VI_Disp_Y_UV_Buf_Preset_High, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
575 setvideoreg(Index_VI_Play_Threshold_Low, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
576 setvideoreg(Index_VI_Play_Threshold_High, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
577
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
578 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
579 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, 0x04, 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
580 setvideoreg(Index_VI_Brightness, 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
581 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
582 setvideoreg(Index_VI_Hue, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
583 setvideoreg(Index_VI_Saturation, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
584 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
585 }
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
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
588 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
589
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_config_playback(vidix_playback_t * info)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
591 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
592 SISOverlayRec overlay;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
593 int srcOffsetX = 0, srcOffsetY = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
594 int sx, sy;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
595 int index = 0, iscrt2 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
596 int total_size;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
597
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
598 short src_w, drw_w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
599 short src_h, drw_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
600 short src_x, drw_x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
601 short src_y, drw_y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
602 long dga_offset;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
603 int pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
604 unsigned int i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
605
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
606 if (!is_supported_fourcc(info->fourcc))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
607 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
608
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
609 /* set chipset/engine.dependent config info */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
610 /* which CRT to use, etc.? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
611 switch (sis_vga_engine) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
612 case SIS_315_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
613 sis_shift_value = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
614 sis_equal.cap |= VEQ_CAP_SATURATION | VEQ_CAP_HUE;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
615 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
616 case SIS_300_VGA:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
617 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
618 sis_shift_value = 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
619 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
620 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
621
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
622 sis_displaymode = DISPMODE_SINGLE1; /* xV driver code in set_dispmode() */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
623 set_dispmode();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
624
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
625 set_disptype_regs();
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 init_overlay();
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 /* get basic dimension info */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
630 src_x = info->src.x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
631 src_y = info->src.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
632 src_w = info->src.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
633 src_h = info->src.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
634
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
635 drw_x = info->dest.x;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
636 drw_y = info->dest.y;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
637 drw_w = info->dest.w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
638 drw_h = info->dest.h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
639
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
640 switch (info->fourcc) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
641 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
642 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
643 pitch = (src_w + 7) & ~7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
644 total_size = (pitch * src_h * 3) >> 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
645 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
646 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
647 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
648 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
649 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
650 pitch = ((src_w << 1) + 3) & ~3;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
651 total_size = pitch * src_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
652 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
653 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
654 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
655 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
656
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
657 /* "allocate" memory for overlay! */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
658 /* start at 8MB = sisfb's "dri reserved space" -
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
659 really shouldn't hardcode though */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
660 /* 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
661 allocate "video heap" memory... */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
662 dga_offset = 0x800000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
663
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
664 /* 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
665 /* this can result in a LOT of frames - probably not necessary */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
666 info->num_frames = 0x700000 / (total_size * 2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
667 if (info->num_frames > VID_PLAY_MAXFRAMES)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
668 info->num_frames = VID_PLAY_MAXFRAMES;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
669
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
670 info->dga_addr = sis_mem_base + dga_offset;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
671 info->dest.pitch.y = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
672 info->dest.pitch.u = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
673 info->dest.pitch.v = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
674 info->offset.y = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
675 info->offset.u = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
676 info->offset.v = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
677 info->frame_size = (total_size * 2); /* why times 2 ? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
678 for (i = 0; i < info->num_frames; i++) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
679 info->offsets[i] = info->frame_size * i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
680 /* save ptrs to mem buffers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
681 sis_frames[i] = (dga_offset + info->offsets[i]);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
682 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
683
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
684 memset(&overlay, 0, sizeof(overlay));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
685 overlay.pixelFormat = sis_format = info->fourcc;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
686 overlay.pitch = overlay.origPitch = pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
687
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
688
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
689 overlay.keyOP = (sis_grkey.ckey.op == CKEY_TRUE ?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
690 VI_ROP_DestKey : VI_ROP_Always);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
691
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
692 overlay.bobEnable = 0x00;
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.SCREENheight = sis_screen_height;
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 /* probably will not support X virtual screen > phys very well? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
697 overlay.dstBox.x1 = drw_x; /* - pScrn->frameX0; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
698 overlay.dstBox.x2 = drw_x + drw_w; /* - pScrn->frameX0; ??? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
699 overlay.dstBox.y1 = drw_y; /* - pScrn->frameY0; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
700 overlay.dstBox.y2 = drw_y + drw_h; /* - pScrn->frameY0; ??? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
701
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
702 if ((overlay.dstBox.x1 > overlay.dstBox.x2) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
703 (overlay.dstBox.y1 > overlay.dstBox.y2))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
704 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
705
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
706 if ((overlay.dstBox.x2 < 0) || (overlay.dstBox.y2 < 0))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
707 return -1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
708
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
709 if (overlay.dstBox.x1 < 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
710 srcOffsetX = src_w * (-overlay.dstBox.x1) / drw_w;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
711 overlay.dstBox.x1 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
712 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
713 if (overlay.dstBox.y1 < 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
714 srcOffsetY = src_h * (-overlay.dstBox.y1) / drw_h;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
715 overlay.dstBox.y1 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
716 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
717
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
718 switch (info->fourcc) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
719 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
720 info->dest.pitch.y = 16;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
721 sx = (src_x + srcOffsetX) & ~7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
722 sy = (src_y + srcOffsetY) & ~1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
723 info->offset.y = sis_Yoff = sx + sy * pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
724 /* 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
725 maybe mplayer & sis define U & V differently?? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
726 info->offset.u = sis_Voff =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
727 src_h * pitch + ((sx + sy * pitch / 2) >> 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
728 info->offset.v = sis_Uoff =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
729 src_h * pitch * 5 / 4 + ((sx + sy * pitch / 2) >> 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
730
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
731 overlay.PSY = (sis_frames[0] + sis_Yoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
732 overlay.PSV = (sis_frames[0] + sis_Voff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
733 overlay.PSU = (sis_frames[0] + sis_Uoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
734 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
735 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
736 sx = (src_x + srcOffsetX) & ~7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
737 sy = (src_y + srcOffsetY) & ~1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
738 info->offset.y = sis_Yoff = sx + sy * pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
739 /* JCP: see above... */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
740 info->offset.u = sis_Voff =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
741 src_h * pitch * 5 / 4 + ((sx + sy * pitch / 2) >> 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
742 info->offset.v = sis_Uoff =
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
743 src_h * pitch + ((sx + sy * pitch / 2) >> 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
744
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
745 overlay.PSY = (sis_frames[0] + sis_Yoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
746 overlay.PSV = (sis_frames[0] + sis_Voff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
747 overlay.PSU = (sis_frames[0] + sis_Uoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
748 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
749 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
750 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
751 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
752 case IMGFMT_RGB15:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
753 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
754 sx = (src_x + srcOffsetX) & ~1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
755 sy = (src_y + srcOffsetY);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
756 info->offset.y = sis_Yoff = sx * 2 + sy * pitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
757
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
758 overlay.PSY = (sis_frames[0] + sis_Yoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
759 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
760 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
761
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
762 /* FIXME: is it possible that srcW < 0? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
763 overlay.srcW = src_w - (sx - src_x);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
764 overlay.srcH = src_h - (sy - src_y);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
765
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
766 /* set merge line buffer */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
767 merge_line_buf(overlay.srcW > 384);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
768
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
769 /* calculate line buffer length */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
770 set_line_buf_size(&overlay);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
771
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
772 if (sis_displaymode == DISPMODE_SINGLE2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
773 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
774 /* TW: On chips with two overlays we use
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
775 * overlay 2 for CRT2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
776 index = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
777 iscrt2 = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
778 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
779 /* TW: On chips with only one overlay we
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
780 * use that only overlay for CRT2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
781 index = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
782 iscrt2 = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
783 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
784 overlay.VBlankActiveFunc = vblank_active_CRT2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
785 /* overlay.GetScanLineFunc = get_scanline_CRT2; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
786 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
787 index = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
788 iscrt2 = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
789 overlay.VBlankActiveFunc = vblank_active_CRT1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
790 /* overlay.GetScanLineFunc = get_scanline_CRT1; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
791 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
792
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
793 /* calc scale factor (to use below) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
794 calc_scale_factor(&overlay, index, iscrt2);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
795
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
796 /* Select video1 (used for CRT1) or video2 (used for CRT2) */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
797 setvideoregmask(Index_VI_Control_Misc2, index, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
798
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
799 set_format(&overlay);
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_colorkey();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
802
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
803 sis_set_eq(&sis_equal);
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
804
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
805 /* set up video overlay registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
806 set_overlay(&overlay, index);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
807
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
808 /* prevent badness if bits are not at default setting */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
809 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
810 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
811
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
812 /* JCP: Xv driver implementation loops back over above code to
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
813 setup mirror CRT2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
814
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
815 return 0;
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
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
818 static int sis_playback_on(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
819 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
820 setvideoregmask(Index_VI_Control_Misc0, 0x02, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
821 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
822 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
823
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
824 static int sis_playback_off(void)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
825 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
826 unsigned char sridx, cridx;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
827 sridx = inSISREG(SISSR);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
828 cridx = inSISREG(SISCR);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
829 close_overlay();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
830 outSISREG(SISSR, sridx);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
831 outSISREG(SISCR, cridx);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
832
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
833 return 0;
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
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
836 static int sis_frame_select(unsigned int frame)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
837 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
838 uint8_t data;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
839 int index = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
840 uint32_t PSY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
841
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
842 if (sis_displaymode == DISPMODE_SINGLE2 && sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
843 index = 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
844 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
845
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
846 PSY = (sis_frames[frame] + sis_Yoff) >> sis_shift_value;
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 /* Unlock address registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
849 data = getvideoreg(Index_VI_Control_Misc1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
850 setvideoreg(Index_VI_Control_Misc1, data | 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
851 /* TEST: Is this required? */
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 end */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
854 /* TEST: Is this required? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
855 if (sis_vga_engine == SIS_315_VGA)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
856 setvideoreg(Index_VI_Control_Misc3, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
857 /* TEST end */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
858
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
859 /* set Y start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
860 setvideoreg(Index_VI_Disp_Y_Buf_Start_Low, (uint8_t) (PSY));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
861 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
862 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
863 /* set 310/325 series overflow bits for Y plane */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
864 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
865 setvideoreg(Index_VI_Y_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
866 ((uint8_t) ((PSY) >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
867 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
868
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
869 /* Set U/V data if using plane formats */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
870 if ((sis_format == IMGFMT_YV12) || (sis_format == IMGFMT_I420)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
871
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
872 uint32_t PSU, PSV;
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 PSU = (sis_frames[frame] + sis_Uoff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
875 PSV = (sis_frames[frame] + sis_Voff) >> sis_shift_value;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
876
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
877 /* set U/V start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
878 setvideoreg(Index_VI_U_Buf_Start_Low, (uint8_t) PSU);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
879 setvideoreg(Index_VI_U_Buf_Start_Middle, (uint8_t) (PSU >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
880 setvideoreg(Index_VI_U_Buf_Start_High, (uint8_t) (PSU >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
881
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
882 setvideoreg(Index_VI_V_Buf_Start_Low, (uint8_t) PSV);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
883 setvideoreg(Index_VI_V_Buf_Start_Middle, (uint8_t) (PSV >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
884 setvideoreg(Index_VI_V_Buf_Start_High, (uint8_t) (PSV >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
885
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
886 /* 310/325 series overflow bits */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
887 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
888 setvideoreg(Index_VI_U_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
889 ((uint8_t) (PSU >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
890 setvideoreg(Index_VI_V_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
891 ((uint8_t) (PSV >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
892 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
893 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
894
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
895 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
896 /* Trigger register copy for 310 series */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
897 setvideoreg(Index_VI_Control_Misc3, 1 << index);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
898 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
899
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
900 /* Lock the address registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
901 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
902
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
903 return 0;
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
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
906 static int sis_get_gkeys(vidix_grkey_t * grkey)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
907 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
908 memcpy(grkey, &sis_grkey, sizeof(vidix_grkey_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
909 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
910 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
911
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
912 static int sis_set_gkeys(const vidix_grkey_t * grkey)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
913 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
914 memcpy(&sis_grkey, grkey, sizeof(vidix_grkey_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
915 set_colorkey();
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
916 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
917 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
918
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
919 static int sis_get_eq(vidix_video_eq_t * eq)
22850
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
920 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
921 memcpy(eq, &sis_equal, sizeof(vidix_video_eq_t));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
922 return 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
923 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
924
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
925 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
926 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
927 int br, sat, cr, hue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
928 if (eq->cap & VEQ_CAP_BRIGHTNESS)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
929 sis_equal.brightness = eq->brightness;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
930 if (eq->cap & VEQ_CAP_CONTRAST)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
931 sis_equal.contrast = eq->contrast;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
932 if (eq->cap & VEQ_CAP_SATURATION)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
933 sis_equal.saturation = eq->saturation;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
934 if (eq->cap & VEQ_CAP_HUE)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
935 sis_equal.hue = eq->hue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
936 if (eq->cap & VEQ_CAP_RGB_INTENSITY) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
937 sis_equal.red_intensity = eq->red_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
938 sis_equal.green_intensity = eq->green_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
939 sis_equal.blue_intensity = eq->blue_intensity;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
940 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
941 sis_equal.flags = eq->flags;
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 cr = (sis_equal.contrast + 1000) * 7 / 2000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
944 if (cr < 0)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
945 cr = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
946 if (cr > 7)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
947 cr = 7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
948
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
949 br = sis_equal.brightness * 127 / 1000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
950 if (br < -128)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
951 br = -128;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
952 if (br > 127)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
953 br = 127;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
954
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
955 sat = (sis_equal.saturation * 7) / 1000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
956 if (sat < -7)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
957 sat = -7;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
961 hue = sis_equal.hue * 7 / 1000;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
962 if (hue < -8)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
963 hue = -8;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
964 if (hue > 7)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
965 hue = 7;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
966
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
967 set_brightness(br);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
968 set_contrast(cr);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
969 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
970 set_saturation(sat);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
971 set_hue(hue);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
972 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
973
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
974 return 0;
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
977 static void set_overlay(SISOverlayPtr pOverlay, int index)
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 uint16_t pitch = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
980 uint8_t h_over = 0, v_over = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
981 uint16_t top, bottom, left, right;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
982 uint16_t screenX = sis_screen_width;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
983 uint16_t screenY = sis_screen_height;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
984 uint8_t data;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
985 uint32_t watchdog;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
986
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
987 top = pOverlay->dstBox.y1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
988 bottom = pOverlay->dstBox.y2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
989 if (bottom > screenY) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
990 bottom = screenY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
991 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
992
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
993 left = pOverlay->dstBox.x1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
994 right = pOverlay->dstBox.x2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
995 if (right > screenX) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
996 right = screenX;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
997 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
998
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
999 /* JCP: these aren't really tested... */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1000 /* TW: DoubleScan modes require Y coordinates * 2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1001 if (sis_vmode & VMODE_DOUBLESCAN) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1002 top <<= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1003 bottom <<= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1004 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1005 /* TW: Interlace modes require Y coordinates / 2 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1006 if (sis_vmode & VMODE_INTERLACED) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1007 top >>= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1008 bottom >>= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1009 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1010
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1011 h_over = (((left >> 8) & 0x0f) | ((right >> 4) & 0xf0));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1012 v_over = (((top >> 8) & 0x0f) | ((bottom >> 4) & 0xf0));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1013
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1014 pitch = pOverlay->pitch >> sis_shift_value;
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 /* set line buffer size */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1017 setvideoreg(Index_VI_Line_Buffer_Size, pOverlay->lineBufSize);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1018
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1019 /* set color key mode */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1020 setvideoregmask(Index_VI_Key_Overlay_OP, pOverlay->keyOP, 0x0F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1021
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1022 /* 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
1023 /* JCP: be safe for now. */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1024 if (1 /*pPriv->mustwait */ ) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1025 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1026 while (pOverlay->VBlankActiveFunc() && --watchdog);
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 if (!watchdog && sis_verbose > 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1030 printf("[SiS]: timed out waiting for vertical retrace\n");
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1031 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1032 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1033
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1034 /* Unlock address registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1035 data = getvideoreg(Index_VI_Control_Misc1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1036 setvideoreg(Index_VI_Control_Misc1, data | 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1037 /* TEST: Is this required? */
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 end */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1040
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1041 /* TEST: Is this required? */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1042 if (sis_vga_engine == SIS_315_VGA)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1043 setvideoreg(Index_VI_Control_Misc3, 0x00);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1044 /* TEST end */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1045
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1046 /* Set Y buf pitch */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1047 setvideoreg(Index_VI_Disp_Y_Buf_Pitch_Low, (uint8_t) (pitch));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1048 setvideoregmask(Index_VI_Disp_Y_UV_Buf_Pitch_Middle,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1049 (uint8_t) (pitch >> 8), 0x0f);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1050
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1051 /* Set Y start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1052 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
1053 setvideoreg(Index_VI_Disp_Y_Buf_Start_Middle,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1054 (uint8_t) ((pOverlay->PSY) >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1055 setvideoreg(Index_VI_Disp_Y_Buf_Start_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1056 (uint8_t) ((pOverlay->PSY) >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1057
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1058 /* set 310/325 series overflow bits for Y plane */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1059 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1060 setvideoreg(Index_VI_Disp_Y_Buf_Pitch_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1061 (uint8_t) (pitch >> 12));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1062 setvideoreg(Index_VI_Y_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1063 ((uint8_t) ((pOverlay->PSY) >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1064 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1065
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1066 /* Set U/V data if using plane formats */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1067 if ((pOverlay->pixelFormat == IMGFMT_YV12) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1068 (pOverlay->pixelFormat == IMGFMT_I420)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1069
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1070 uint32_t PSU, PSV;
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 PSU = pOverlay->PSU;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1073 PSV = pOverlay->PSV;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1074
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1075 /* Set U/V pitch */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1076 setvideoreg(Index_VI_Disp_UV_Buf_Pitch_Low,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1077 (uint8_t) (pitch >> 1));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1078 setvideoregmask(Index_VI_Disp_Y_UV_Buf_Pitch_Middle,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1079 (uint8_t) (pitch >> 5), 0xf0);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1080
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1081 /* set U/V start address */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1082 setvideoreg(Index_VI_U_Buf_Start_Low, (uint8_t) PSU);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1083 setvideoreg(Index_VI_U_Buf_Start_Middle, (uint8_t) (PSU >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1084 setvideoreg(Index_VI_U_Buf_Start_High, (uint8_t) (PSU >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1085
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1086 setvideoreg(Index_VI_V_Buf_Start_Low, (uint8_t) PSV);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1087 setvideoreg(Index_VI_V_Buf_Start_Middle, (uint8_t) (PSV >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1088 setvideoreg(Index_VI_V_Buf_Start_High, (uint8_t) (PSV >> 16));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1089
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1090 /* 310/325 series overflow bits */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1091 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1092 setvideoreg(Index_VI_Disp_UV_Buf_Pitch_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1093 (uint8_t) (pitch >> 13));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1094 setvideoreg(Index_VI_U_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1095 ((uint8_t) (PSU >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1096 setvideoreg(Index_VI_V_Buf_Start_Over,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1097 ((uint8_t) (PSV >> 24) & 0x01));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1098 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1099 }
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 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1102 /* Trigger register copy for 310 series */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1103 setvideoreg(Index_VI_Control_Misc3, 1 << index);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1104 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1105
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1106 /* set scale factor */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1107 setvideoreg(Index_VI_Hor_Post_Up_Scale_Low,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1108 (uint8_t) (pOverlay->HUSF));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1109 setvideoreg(Index_VI_Hor_Post_Up_Scale_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1110 (uint8_t) ((pOverlay->HUSF) >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1111 setvideoreg(Index_VI_Ver_Up_Scale_Low, (uint8_t) (pOverlay->VUSF));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1112 setvideoreg(Index_VI_Ver_Up_Scale_High,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1113 (uint8_t) ((pOverlay->VUSF) >> 8));
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1114
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1115 setvideoregmask(Index_VI_Scale_Control, (pOverlay->IntBit << 3)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1116 | (pOverlay->wHPre), 0x7f);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1117
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1118 /* set destination window position */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1119 setvideoreg(Index_VI_Win_Hor_Disp_Start_Low, (uint8_t) left);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1120 setvideoreg(Index_VI_Win_Hor_Disp_End_Low, (uint8_t) right);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1121 setvideoreg(Index_VI_Win_Hor_Over, (uint8_t) h_over);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1122
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1123 setvideoreg(Index_VI_Win_Ver_Disp_Start_Low, (uint8_t) top);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1124 setvideoreg(Index_VI_Win_Ver_Disp_End_Low, (uint8_t) bottom);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1125 setvideoreg(Index_VI_Win_Ver_Over, (uint8_t) v_over);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1126
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1127 setvideoregmask(Index_VI_Control_Misc1, pOverlay->bobEnable, 0x1a);
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 /* Lock the address registers */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1130 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x20);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1131 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1132
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1133
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1134 /* 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
1135 static void close_overlay(void)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1136 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1137 uint32_t watchdog;
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 if ((sis_displaymode == DISPMODE_SINGLE2) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1140 (sis_displaymode == DISPMODE_MIRROR)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1141 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1142 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1143 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1144 while (vblank_active_CRT2() && --watchdog);
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 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1148 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1149 while (vblank_active_CRT2() && --watchdog);
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 } else if (sis_displaymode == DISPMODE_SINGLE2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1153 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1154 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1155 while (vblank_active_CRT1() && --watchdog);
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 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1159 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1160 while (vblank_active_CRT1() && --watchdog);
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 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1164 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1165 if ((sis_displaymode == DISPMODE_SINGLE1) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1166 (sis_displaymode == DISPMODE_MIRROR)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1167 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x01);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1168 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1169 while (vblank_active_CRT1() && --watchdog);
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 setvideoregmask(Index_VI_Control_Misc0, 0x00, 0x02);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1173 watchdog = WATCHDOG_DELAY;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1174 while (vblank_active_CRT1() && --watchdog);
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 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1178 }
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 static void
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1182 calc_scale_factor(SISOverlayPtr pOverlay, int index, int iscrt2)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1183 {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1184 uint32_t i = 0, mult = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1185 int flag = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1186
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1187 int dstW = pOverlay->dstBox.x2 - pOverlay->dstBox.x1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1188 int dstH = pOverlay->dstBox.y2 - pOverlay->dstBox.y1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1189 int srcW = pOverlay->srcW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1190 int srcH = pOverlay->srcH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1191 /* uint16_t LCDheight = pSiS->LCDheight; */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1192 int srcPitch = pOverlay->origPitch;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1193 int origdstH = dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1194
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1195 /* get rid of warnings for now */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1196 index = index;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1197 iscrt2 = iscrt2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1198
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1199 /* TW: For double scan modes, we need to double the height
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1200 * (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
1201 * 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
1202 * Interlace mode vice versa.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1203 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1204 if (sis_vmode & VMODE_DOUBLESCAN) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1205 dstH = origdstH << 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1206 flag = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1207 if (sis_vga_engine == SIS_315_VGA) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1208 dstW <<= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1209 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1210 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1211 if (sis_vmode & VMODE_INTERLACED) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1212 dstH = origdstH >> 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1213 flag = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1214 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1215
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1216 if (dstW < OVERLAY_MIN_WIDTH)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1217 dstW = OVERLAY_MIN_WIDTH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1218 if (dstW == srcW) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1219 pOverlay->HUSF = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1220 pOverlay->IntBit = 0x05;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1221 pOverlay->wHPre = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1222 } else if (dstW > srcW) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1223 dstW += 2;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1224 pOverlay->HUSF = (srcW << 16) / dstW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1225 pOverlay->IntBit = 0x04;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1226 pOverlay->wHPre = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1227 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1228 int tmpW = dstW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1229
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1230 /* 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
1231 pitch isn't a multiple of 256.
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1232 TODO: Test this on the 310/325 series!
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1233 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1234 if ((srcPitch % 256) || (srcPitch < 256)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1235 if (((dstW * 1000) / srcW) < 125)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1236 dstW = tmpW = ((srcW * 125) / 1000) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1237 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1238
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1239 i = 0;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1240 pOverlay->IntBit = 0x01;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1241 while (srcW >= tmpW) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1242 tmpW <<= 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1243 i++;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1244 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1245 pOverlay->wHPre = (uint8_t) (i - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1246 dstW <<= (i - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1247 if ((srcW % dstW))
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1248 pOverlay->HUSF = ((srcW - dstW) << 16) / dstW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1249 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1250 pOverlay->HUSF = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1251 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1252
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1253 if (dstH < OVERLAY_MIN_HEIGHT)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1254 dstH = OVERLAY_MIN_HEIGHT;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1255 if (dstH == srcH) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1256 pOverlay->VUSF = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1257 pOverlay->IntBit |= 0x0A;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1258 } else if (dstH > srcH) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1259 dstH += 0x02;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1260 pOverlay->VUSF = (srcH << 16) / dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1261 pOverlay->IntBit |= 0x08;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1262 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1263 uint32_t realI;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1264
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1265 i = realI = srcH / dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1266 pOverlay->IntBit |= 0x02;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1267
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1268 if (i < 2) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1269 pOverlay->VUSF = ((srcH - dstH) << 16) / dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1270 /* TW: Needed for LCD-scaling modes */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1271 if ((flag) && (mult = (srcH / origdstH)) >= 2)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1272 pOverlay->pitch /= mult;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1273 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1274 if (((srcPitch * i) >> 2) > 0xFFF) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1275 i = (0xFFF * 2 / srcPitch);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1276 pOverlay->VUSF = 0xFFFF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1277 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1278 dstH = i * dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1279 if (srcH % dstH)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1280 pOverlay->VUSF = ((srcH - dstH) << 16) / dstH;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1281 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1282 pOverlay->VUSF = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1283 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1284 /* set video frame buffer offset */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1285 pOverlay->pitch = (uint16_t) (srcPitch * i);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1286 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1287 }
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 static void set_line_buf_size(SISOverlayPtr pOverlay)
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 uint8_t preHIDF;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1293 uint32_t i;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1294 uint32_t line = pOverlay->srcW;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1295
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1296 if ((pOverlay->pixelFormat == IMGFMT_YV12) ||
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1297 (pOverlay->pixelFormat == IMGFMT_I420)) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1298 preHIDF = pOverlay->wHPre & 0x07;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1299 switch (preHIDF) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1300 case 3:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1301 if ((line & 0xffffff00) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1302 i = (line >> 8);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1303 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1304 i = (line >> 8) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1305 pOverlay->lineBufSize = (uint8_t) (i * 32 - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1306 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1307 case 4:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1308 if ((line & 0xfffffe00) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1309 i = (line >> 9);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1310 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1311 i = (line >> 9) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1312 pOverlay->lineBufSize = (uint8_t) (i * 64 - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1313 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1314 case 5:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1315 if ((line & 0xfffffc00) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1316 i = (line >> 10);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1317 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1318 i = (line >> 10) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1319 pOverlay->lineBufSize = (uint8_t) (i * 128 - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1320 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1321 case 6:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1322 if ((line & 0xfffff800) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1323 i = (line >> 11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1324 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1325 i = (line >> 11) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1326 pOverlay->lineBufSize = (uint8_t) (i * 256 - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1327 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1328 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1329 if ((line & 0xffffff80) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1330 i = (line >> 7);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1331 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1332 i = (line >> 7) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1333 pOverlay->lineBufSize = (uint8_t) (i * 16 - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1334 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1335 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1336 } else { /* YUV2, UYVY */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1337 if ((line & 0xffffff8) == line)
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1338 i = (line >> 3);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1339 else
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1340 i = (line >> 3) + 1;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1341 pOverlay->lineBufSize = (uint8_t) (i - 1);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1342 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1343 }
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 static void merge_line_buf(int enable)
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 if (enable) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1348 switch (sis_displaymode) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1349 case DISPMODE_SINGLE1:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1350 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1351 /* dual line merge */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1352 setvideoregmask(Index_VI_Control_Misc2, 0x10, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1353 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1354 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1355 setvideoregmask(Index_VI_Control_Misc2, 0x10, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1356 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1357 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1358 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1359 case DISPMODE_SINGLE2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1360 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1361 /* line merge */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1362 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1363 setvideoregmask(Index_VI_Control_Misc1, 0x04, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1364 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1365 setvideoregmask(Index_VI_Control_Misc2, 0x10, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1366 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1367 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1368 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1369 case DISPMODE_MIRROR:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1370 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1371 /* line merge */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1372 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1373 setvideoregmask(Index_VI_Control_Misc1, 0x04, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1374 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1375 /* line merge */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1376 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1377 setvideoregmask(Index_VI_Control_Misc1, 0x04, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1378 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1379 break;
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 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1382 switch (sis_displaymode) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1383 case DISPMODE_SINGLE1:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1384 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1385 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1386 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1387 case DISPMODE_SINGLE2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1388 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1389 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1390 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1391 } else {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1392 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1393 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1394 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1395 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1396 case DISPMODE_MIRROR:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1397 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1398 setvideoregmask(Index_VI_Control_Misc2, 0x00, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1399 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1400 if (sis_has_two_overlays) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1401 setvideoregmask(Index_VI_Control_Misc2, 0x01, 0x11);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1402 setvideoregmask(Index_VI_Control_Misc1, 0x00, 0x04);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1403 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1404 break;
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 }
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 static void set_format(SISOverlayPtr pOverlay)
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 uint8_t fmt;
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 switch (pOverlay->pixelFormat) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1415 case IMGFMT_YV12:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1416 case IMGFMT_I420:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1417 fmt = 0x0c;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1418 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1419 case IMGFMT_YUY2:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1420 fmt = 0x28;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1421 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1422 case IMGFMT_UYVY:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1423 fmt = 0x08;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1424 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1425 case IMGFMT_RGB15: /* D[5:4] : 00 RGB555, 01 RGB 565 */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1426 fmt = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1427 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1428 case IMGFMT_RGB16:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1429 fmt = 0x10;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1430 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1431 default:
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1432 fmt = 0x00;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1433 break;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1434 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1435 setvideoregmask(Index_VI_Control_Misc0, fmt, 0x7c);
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1438 static void set_colorkey(void)
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 uint8_t r, g, b;
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 b = (uint8_t) sis_grkey.ckey.blue;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1443 g = (uint8_t) sis_grkey.ckey.green;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1444 r = (uint8_t) sis_grkey.ckey.red;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1445
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1446 /* set color key mode */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1447 setvideoregmask(Index_VI_Key_Overlay_OP,
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1448 sis_grkey.ckey.op == CKEY_TRUE ?
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1449 VI_ROP_DestKey : VI_ROP_Always, 0x0F);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1450
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1451 /* set colorkey values */
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1452 setvideoreg(Index_VI_Overlay_ColorKey_Blue_Min, (uint8_t) b);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1453 setvideoreg(Index_VI_Overlay_ColorKey_Green_Min, (uint8_t) g);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1454 setvideoreg(Index_VI_Overlay_ColorKey_Red_Min, (uint8_t) r);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1455
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1456 setvideoreg(Index_VI_Overlay_ColorKey_Blue_Max, (uint8_t) b);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1457 setvideoreg(Index_VI_Overlay_ColorKey_Green_Max, (uint8_t) g);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1458 setvideoreg(Index_VI_Overlay_ColorKey_Red_Max, (uint8_t) r);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1459 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1460
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1461 static void set_brightness(uint8_t brightness)
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 setvideoreg(Index_VI_Brightness, 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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1466 static void set_contrast(uint8_t contrast)
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 setvideoregmask(Index_VI_Contrast_Enh_Ctrl, contrast, 0x07);
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1471 /* Next 3 functions are 310/325 series only */
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 static void set_saturation(char saturation)
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 uint8_t temp = 0;
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 if (saturation < 0) {
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1478 temp |= 0x88;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1479 saturation = -saturation;
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1480 }
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1481 temp |= (saturation & 0x07);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1482 temp |= ((saturation & 0x07) << 4);
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1483
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1484 setvideoreg(Index_VI_Saturation, temp);
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
9a1e26fef45b Move driver files directly into the vidix directory.
diego
parents:
diff changeset
1487 static void set_hue(uint8_t hue)
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 setvideoreg(Index_VI_Hue, (hue & 0x08) ? (hue ^ 0x07) : 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
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
1492 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
1493 "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
1494 NULL,
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28307
diff changeset
1495
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
1496 .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
1497 .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
1498 .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
1499 .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
1500 .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
1501 .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
1502 .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
1503 .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
1504 .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
1505 .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
1506 .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
1507 .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
1508 .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
1509 };