2
* Copyright � 2001 Keith Packard
4
* Permission to use, copy, modify, distribute, and sell this software and its
5
* documentation for any purpose is hereby granted without fee, provided that
6
* the above copyright notice appear in all copies and that both that
7
* copyright notice and this permission notice appear in supporting
8
* documentation, and that the name of Keith Packard not be used in
9
* advertising or publicity pertaining to distribution of the software without
10
* specific, written prior permission. Keith Packard makes no
11
* representations about the suitability of this software for any purpose. It
12
* is provided "as is" without express or implied warranty.
14
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16
* EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20
* PERFORMANCE OF THIS SOFTWARE.
22
/* $XFree86: xc/programs/Xserver/hw/kdrive/smi/smi.c,v 1.11 2002/10/18 06:31:17 keithp Exp $ */
25
#include <kdrive-config.h>
32
smiCardInit (KdCardInfo *card)
37
smic = (SmiCardInfo *) xalloc (sizeof (SmiCardInfo));
40
memset (smic, '\0', sizeof (SmiCardInfo));
42
(void) smiMapReg (card, smic);
44
if (!subInitialize (card, &smic->sub))
56
smiScreenInit (KdScreenInfo *screen)
58
SmiCardInfo *smic = screen->card->driver;
62
smis = (SmiScreenInfo *) xalloc (sizeof (SmiScreenInfo));
65
memset (smis, '\0', sizeof (SmiScreenInfo));
66
screen->driver = smis;
67
if (!subScreenInitialize (screen, &smis->sub))
74
screen->softCursor = TRUE;
76
smis->screen = smis->sub.fb;
78
smis->screen = smic->sub.fb;
85
smiInitScreen (ScreenPtr pScreen)
91
KdScreenPriv(pScreen);
92
SmiCardInfo *smic = pScreenPriv->screen->card->driver;
93
if (smic->media_reg && smic->reg)
94
smiInitVideo(pScreen);
97
ret = subInitScreen (pScreen);
104
smiRandRSetConfig (ScreenPtr pScreen,
107
RRScreenSizePtr pSize)
112
kaaWaitSync (pScreen);
114
ret = subRandRSetConfig (pScreen, randr, rate, pSize);
120
smiRandRInit (ScreenPtr pScreen)
125
pScrPriv->rrSetConfig = smiRandRSetConfig;
132
smiFinishInitScreen (ScreenPtr pScreen)
135
ret = subFinishInitScreen (pScreen);
137
smiRandRInit (pScreen);
143
smiPreserve (KdCardInfo *card)
151
smiMapReg (KdCardInfo *card, SmiCardInfo *smic)
154
smic->io_base = 0; /* only handles one SMI card at standard VGA address */
155
smic->reg_base = (CARD8 *) KdMapDevice (SMI_REG_BASE(card),
164
KdSetMappedMode (SMI_REG_BASE(card),
166
KD_MAPPED_MODE_REGISTERS);
167
smic->dpr = (DPR *) (smic->reg_base + SMI_DPR_OFF(card));
173
smiUnmapReg (KdCardInfo *card, SmiCardInfo *smic)
178
KdResetMappedMode (SMI_REG_BASE(card),
180
KD_MAPPED_MODE_REGISTERS);
181
KdUnmapDevice ((void *) smic->reg_base, SMI_REG_SIZE(card));
189
smiOutb (CARD16 port, CARD8 val)
191
asm volatile ("outb %b0,%w1" : : "a" (val), "d" (port));
198
asm volatile ("inb %w1,%b0" : "=a" (v) : "d" (port));
203
smiGetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id)
205
smiOutb (smic->io_base + addr, id);
206
return smiInb (smic->io_base + data);
210
smiSetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id, CARD8 val)
212
smiOutb (smic->io_base + addr, id);
213
smiOutb (smic->io_base + data, val);
217
smiSetMMIO (KdCardInfo *card, SmiCardInfo *smic)
221
smiMapReg (card, smic);
226
smiResetMMIO (KdCardInfo *card, SmiCardInfo *smic)
228
smiUnmapReg (card, smic);
232
smiDPMS (ScreenPtr pScreen, int mode)
236
ret = subDPMS (pScreen, mode);
242
smiEnable (ScreenPtr pScreen)
244
KdScreenPriv(pScreen);
245
SmiCardInfo *smic = pScreenPriv->card->driver;
249
if (!subEnable (pScreen))
252
smiSetMMIO (pScreenPriv->card, smic);
253
smiDPMS (pScreen, KD_DPMS_NORMAL);
256
KdXVEnable (pScreen);
264
smiDisable (ScreenPtr pScreen)
266
KdScreenPriv(pScreen);
267
SmiCardInfo *smic = pScreenPriv->card->driver;
272
KdXVDisable (pScreen);
275
smiResetMMIO (pScreenPriv->card, smic);
276
subDisable (pScreen);
281
smiRestore (KdCardInfo *card)
289
smiScreenFini (KdScreenInfo *screen)
291
SmiScreenInfo *smis = (SmiScreenInfo *) screen->driver;
294
subScreenFini (screen);
301
smiCardFini (KdCardInfo *card)
303
SmiCardInfo *smic = card->driver;
306
smiUnmapReg (card, smic);
311
#define smiCursorInit 0 /* initCursor */
312
#define smiCursorEnable 0 /* enableCursor */
313
#define smiCursorDisable 0 /* disableCursor */
314
#define smiCursorFini 0 /* finiCursor */
315
#define smiRecolorCursor 0 /* recolorCursor */
317
KdCardFuncs smiFuncs = {
318
smiCardInit, /* cardinit */
319
smiScreenInit, /* scrinit */
320
smiInitScreen, /* initScreen */
321
smiFinishInitScreen, /* finishInitScreen */
322
subCreateResources, /* createRes */
323
smiPreserve, /* preserve */
324
smiEnable, /* enable */
326
smiDisable, /* disable */
327
smiRestore, /* restore */
328
smiScreenFini, /* scrfini */
329
smiCardFini, /* cardfini */
331
smiCursorInit, /* initCursor */
332
smiCursorEnable, /* enableCursor */
333
smiCursorDisable, /* disableCursor */
334
smiCursorFini, /* finiCursor */
335
smiRecolorCursor, /* recolorCursor */
337
smiDrawInit, /* initAccel */
338
smiDrawEnable, /* enableAccel */
339
smiDrawDisable, /* disableAccel */
340
smiDrawFini, /* finiAccel */
342
subGetColors, /* getColors */
343
subPutColors, /* putColors */