summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2001-09-05 07:12:43 +0000
committerKeith Packard <keithp@keithp.com>2001-09-05 07:12:43 +0000
commit216090d1aedb23c691a75da25b14d8543b932e1c (patch)
tree3e7f781b63a47a83208880560d8af24db402671e
parentf856b952ec7251d6e95f0b93d62fb026d07b0ebc (diff)
kdrive: Add primitive ct65550 server. Update kdrive/vesa code to support
DPMS using VESA bios routines. Include support for Toshiba SMM DPMS as well
-rw-r--r--hw/kdrive/chips/Imakefile14
-rw-r--r--hw/kdrive/chips/chips.c302
-rw-r--r--hw/kdrive/chips/chips.h122
-rw-r--r--hw/kdrive/chips/chipsdraw.c490
-rw-r--r--hw/kdrive/chips/chipsstub.c59
-rw-r--r--hw/kdrive/vesa/vbe.c47
-rw-r--r--hw/kdrive/vesa/vbe.h4
-rw-r--r--hw/kdrive/vesa/vesa.c96
-rw-r--r--hw/kdrive/vesa/vesa.h6
-rw-r--r--hw/kdrive/vesa/vesainit.c4
-rw-r--r--hw/kdrive/vesa/vga.c5
-rw-r--r--hw/kdrive/vesa/vga.h4
12 files changed, 1137 insertions, 16 deletions
diff --git a/hw/kdrive/chips/Imakefile b/hw/kdrive/chips/Imakefile
new file mode 100644
index 000000000..d2a06d265
--- /dev/null
+++ b/hw/kdrive/chips/Imakefile
@@ -0,0 +1,14 @@
+XCOMM $XConsortium: Imakefile /main/10 1996/12/02 10:20:33 lehors $
+XCOMM $XFree86: xc/programs/Xserver/hw/kdrive/chips/Imakefile,v 1.6 2000/10/20 00:19:51 keithp Exp $
+KDRIVE=..
+#include "../Kdrive.tmpl"
+
+SRCS = chips.c chipsdraw.c chipsstub.c
+
+OBJS = chips.o chipsdraw.o chipsstub.o
+
+INCLUDES = -I. $(KDINCS) -I$(KDRIVE)/vesa
+
+NormalLibraryObjectRule()
+NormalLibraryTarget(chips,$(OBJS))
+DependTarget()
diff --git a/hw/kdrive/chips/chips.c b/hw/kdrive/chips/chips.c
new file mode 100644
index 000000000..3ab05bf86
--- /dev/null
+++ b/hw/kdrive/chips/chips.c
@@ -0,0 +1,302 @@
+/*
+ * Copyright © 2001 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/trident/trident.c,v 1.18 2001/06/04 09:45:42 keithp Exp $ */
+
+#include "chips.h"
+#include <sys/io.h>
+
+#undef CHIPS_DEBUG
+
+Bool
+chipsCardInit (KdCardInfo *card)
+{
+ int k;
+ char *pixels;
+ ChipsCardInfo *chipsc;
+ CARD8 r00, r01, r02;
+ CARD8 r39;
+
+ chipsc = (ChipsCardInfo *) xalloc (sizeof (ChipsCardInfo));
+ if (!chipsc)
+ return FALSE;
+
+ iopl (3);
+
+ if (!vesaInitialize (card, &chipsc->vesa))
+ {
+ xfree (chipsc);
+ return FALSE;
+ }
+
+#ifdef USE_PCI
+ chipsc->window = (CARD32 *) (chipsc->cop_base + 0x10000);
+#else
+ chipsc->window = 0;
+#endif
+ card->driver = chipsc;
+
+ return TRUE;
+}
+
+Bool
+chipsScreenInit (KdScreenInfo *screen)
+{
+ ChipsCardInfo *chipsc = screen->card->driver;
+ ChipsScreenInfo *chipss;
+ int screen_size, memory;
+ CARD32 mmio_base;
+ CARD32 mmio_size;
+
+ chipss = (ChipsScreenInfo *) xalloc (sizeof (ChipsScreenInfo));
+ if (!chipss)
+ return FALSE;
+ memset (chipss, '\0', sizeof (ChipsScreenInfo));
+ if (!vesaScreenInitialize (screen, &chipss->vesa))
+ {
+ xfree (chipss);
+ return FALSE;
+ }
+
+ if (chipss->vesa.mapping != VESA_LINEAR)
+ screen->dumb = TRUE;
+ if (!screen->dumb)
+ {
+ chipss->mmio_base = (CARD8 *) KdMapDevice (CHIPS_MMIO_BASE(chipss),
+ CHIPS_MMIO_SIZE(chipss));
+
+ if (chipss->mmio_base)
+ {
+ KdSetMappedMode (CHIPS_MMIO_BASE(chipss),
+ CHIPS_MMIO_SIZE(chipss),
+ KD_MAPPED_MODE_REGISTERS);
+ }
+ else
+ screen->dumb = TRUE;
+ }
+ else
+ chipss->mmio_base = 0;
+
+ chipss->screen = chipss->vesa.fb;
+ memory = chipss->vesa.fb_size;
+
+ screen_size = screen->fb[0].byteStride * screen->height;
+
+ if (chipss->screen && memory >= screen_size + 2048)
+ {
+ memory -= 2048;
+ chipss->cursor_base = chipss->screen + memory - 2048;
+ }
+ else
+ chipss->cursor_base = 0;
+ memory -= screen_size;
+ if (memory > screen->fb[0].byteStride)
+ {
+ chipss->off_screen = chipss->screen + screen_size;
+ chipss->off_screen_size = memory;
+ }
+ else
+ {
+ chipss->off_screen = 0;
+ chipss->off_screen_size = 0;
+ }
+ screen->driver = chipss;
+ return TRUE;
+}
+
+Bool
+chipsInitScreen (ScreenPtr pScreen)
+{
+ return vesaInitScreen (pScreen);
+}
+
+Bool
+chipsFinishInitScreen (ScreenPtr pScreen)
+{
+ return vesaFinishInitScreen (pScreen);
+}
+
+CARD8
+chipsReadXR (ChipsScreenInfo *chipss, CARD8 index)
+{
+ CARD8 value;
+ outb (index, 0x3d6);
+ value = inb (0x3d7);
+ return value;
+}
+
+void
+chipsWriteXR (ChipsScreenInfo *chipss, CARD8 index, CARD8 value)
+{
+ outb (index, 0x3d6);
+ outb (value, 0x3d7);
+}
+
+CARD8
+chipsReadFR (ChipsScreenInfo *chipss, CARD8 index)
+{
+ CARD8 value;
+ outb (index, 0x3d0);
+ value = inb (0x3d1);
+ return value;
+}
+
+void
+chipsWriteFR (ChipsScreenInfo *chipss, CARD8 index, CARD8 value)
+{
+ outb (index, 0x3d0);
+ outb (value, 0x3d1);
+}
+
+CARD8
+chipsReadSeq (ChipsScreenInfo *chipss, CARD8 index)
+{
+ CARD8 value;
+ outb (index, 0x3c4);
+ value = inb (0x3c5);
+ return value;
+}
+
+void
+chipsWriteSeq (ChipsScreenInfo *chipss, CARD8 index, CARD8 value)
+{
+ outb (index, 0x3c4);
+ outb (value, 0x3c5);
+}
+
+void
+chipsPreserve (KdCardInfo *card)
+{
+ ChipsCardInfo *chipss = card->driver;
+ vesaPreserve(card);
+}
+
+void
+chipsSetMMIO (ChipsCardInfo *chipsc)
+{
+}
+
+void
+chipsResetMMIO (ChipsCardInfo *chipsc)
+{
+}
+
+Bool
+chipsEnable (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ ChipsCardInfo *chipsc = pScreenPriv->card->driver;
+
+ if (!vesaEnable (pScreen))
+ return FALSE;
+ chipsSetMMIO (chipsc);
+ return TRUE;
+}
+
+Bool
+chipsDPMS (ScreenPtr pScreen, int mode)
+{
+ KdScreenPriv(pScreen);
+ chipsScreenInfo(pScreenPriv);
+
+ ErrorF ("seqreg 0x01 0x%x\n", chipsReadSeq (chipss, 0x1));
+ ErrorF ("dpmsreg XR61 0x%x\n", chipsReadXR (chipss, 0x61));
+ ErrorF ("dpmsreg XR73 0x%x\n", chipsReadXR (chipss, 0x73));
+
+ ErrorF ("flat panel FR05 0x%x\n", chipsReadFR (chipss, 0x5));
+ ErrorF ("flat panel XR52 0x%x\n", chipsReadXR (chipss, 0x52));
+ return TRUE;
+}
+
+void
+chipsDisable (ScreenPtr pScreen)
+{
+ vesaDisable (pScreen);
+}
+
+void
+chipsRestore (KdCardInfo *card)
+{
+ ChipsCardInfo *chipsc = card->driver;
+
+ chipsResetMMIO (chipsc);
+ vesaRestore (card);
+}
+
+void
+chipsScreenFini (KdScreenInfo *screen)
+{
+ ChipsScreenInfo *chipss = (ChipsScreenInfo *) screen->driver;
+
+ if (chipss->mmio_base)
+ {
+ KdUnmapDevice ((void *) chipss->mmio_base, CHIPS_MMIO_SIZE(chipss));
+ KdResetMappedMode (CHIPS_MMIO_BASE(chipss),
+ CHIPS_MMIO_SIZE(chipss),
+ KD_MAPPED_MODE_REGISTERS);
+ }
+ vesaScreenFini (screen);
+ xfree (chipss);
+ screen->driver = 0;
+}
+
+void
+chipsCardFini (KdCardInfo *card)
+{
+ ChipsCardInfo *chipsc = card->driver;
+
+ vesaCardFini (card);
+}
+
+#define chipsCursorInit (void *) 0
+#define chipsCursorEnable (void *) 0
+#define chipsCursorDisable (void *) 0
+#define chipsCursorFini (void *) 0
+#define chipsRecolorCursor (void *) 0
+
+KdCardFuncs chipsFuncs = {
+ chipsCardInit, /* cardinit */
+ chipsScreenInit, /* scrinit */
+ chipsInitScreen, /* initScreen */
+ chipsPreserve, /* preserve */
+ chipsEnable, /* enable */
+ vesaDPMS, /* dpms */
+ chipsDisable, /* disable */
+ chipsRestore, /* restore */
+ chipsScreenFini, /* scrfini */
+ chipsCardFini, /* cardfini */
+
+ chipsCursorInit, /* initCursor */
+ chipsCursorEnable, /* enableCursor */
+ chipsCursorDisable, /* disableCursor */
+ chipsCursorFini, /* finiCursor */
+ chipsRecolorCursor, /* recolorCursor */
+
+ chipsDrawInit, /* initAccel */
+ chipsDrawEnable, /* enableAccel */
+ chipsDrawSync, /* syncAccel */
+ chipsDrawDisable, /* disableAccel */
+ chipsDrawFini, /* finiAccel */
+
+ vesaGetColors, /* getColors */
+ vesaPutColors, /* putColors */
+ chipsFinishInitScreen /* finishInitScreen */
+};
diff --git a/hw/kdrive/chips/chips.h b/hw/kdrive/chips/chips.h
new file mode 100644
index 000000000..82d081e7d
--- /dev/null
+++ b/hw/kdrive/chips/chips.h
@@ -0,0 +1,122 @@
+/*
+ * Id: chips.h,v 1.2 1999/11/02 08:17:24 keithp Exp $
+ *
+ * Copyright © 1999 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/chips/chips.h,v 1.9 2000/11/29 08:42:25 keithp Exp $ */
+
+#ifndef _CHIPS_H_
+#define _CHIPS_H_
+#include <vesa.h>
+
+/*
+ * offset from ioport beginning
+ */
+
+#define HIQV
+#ifdef HIQV
+#define CHIPS_MMIO_BASE(c) ((c)->vesa.fb_phys + 0x400000)
+#else
+#define CHIPS_MMIO_BASE(c) ((c)->vesa.fb_phys + 0x200000)
+#endif
+#define CHIPS_MMIO_SIZE(c) (0x20000)
+
+typedef volatile CARD8 VOL8;
+typedef volatile CARD16 VOL16;
+typedef volatile CARD32 VOL32;
+
+typedef struct _chipsSave {
+ int dummy;
+} ChipsSave;
+
+typedef struct _chipsCardInfo {
+ VesaCardPrivRec vesa;
+ CARD32 *window;
+ Bool mmio;
+ ChipsSave save;
+} ChipsCardInfo;
+
+#define getChipsCardInfo(kd) ((ChipsCardInfo *) ((kd)->card->driver))
+#define chipsCardInfo(kd) ChipsCardInfo *chipsc = getChipsCardInfo(kd)
+
+typedef struct _chipsCursor {
+ int width, height;
+ int xhot, yhot;
+ Bool has_cursor;
+ CursorPtr pCursor;
+ Pixel source, mask;
+} ChipsCursor;
+
+#define CHIPS_CURSOR_WIDTH 64
+#define CHIPS_CURSOR_HEIGHT 64
+
+typedef struct _chipsScreenInfo {
+ VesaScreenPrivRec vesa;
+ CARD8 *mmio_base;
+ CARD8 *cursor_base;
+ CARD8 *screen;
+ CARD8 *off_screen;
+ int off_screen_size;
+ ChipsCursor cursor;
+} ChipsScreenInfo;
+
+#define getChipsScreenInfo(kd) ((ChipsScreenInfo *) ((kd)->screen->driver))
+#define chipsScreenInfo(kd) ChipsScreenInfo *chipss = getChipsScreenInfo(kd)
+
+Bool
+chipsDrawInit (ScreenPtr pScreen);
+
+void
+chipsDrawEnable (ScreenPtr pScreen);
+
+void
+chipsDrawSync (ScreenPtr pScreen);
+
+void
+chipsDrawDisable (ScreenPtr pScreen);
+
+void
+chipsDrawFini (ScreenPtr pScreen);
+
+CARD8
+chipsReadXR (ChipsScreenInfo *chipsc, CARD8 index);
+
+void
+chipsWriteXR (ChipsScreenInfo *chipsc, CARD8 index, CARD8 value);
+
+Bool
+chipsCursorInit (ScreenPtr pScreen);
+
+void
+chipsCursorEnable (ScreenPtr pScreen);
+
+void
+chipsCursorDisable (ScreenPtr pScreen);
+
+void
+chipsCursorFini (ScreenPtr pScreen);
+
+void
+chipsRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
+
+extern KdCardFuncs chipsFuncs;
+
+#endif /* _CHIPS_H_ */
diff --git a/hw/kdrive/chips/chipsdraw.c b/hw/kdrive/chips/chipsdraw.c
new file mode 100644
index 000000000..f23b9fa55
--- /dev/null
+++ b/hw/kdrive/chips/chipsdraw.c
@@ -0,0 +1,490 @@
+/*
+ * Id: tridentdraw.c,v 1.1 1999/11/02 03:54:47 keithp Exp $
+ *
+ * Copyright © 1999 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/trident/tridentdraw.c,v 1.10 2001/06/03 18:48:19 keithp Exp $ */
+
+#include "chips.h"
+
+#include "Xmd.h"
+#include "gcstruct.h"
+#include "scrnintstr.h"
+#include "pixmapstr.h"
+#include "regionstr.h"
+#include "mistruct.h"
+#include "fontstruct.h"
+#include "dixfontstr.h"
+#include "fb.h"
+#include "migc.h"
+#include "miline.h"
+
+CARD8 chipsBltRop[16] = {
+ /* GXclear */ 0x00, /* 0 */
+ /* GXand */ 0x88, /* src AND dst */
+ /* GXandReverse */ 0x44, /* src AND NOT dst */
+ /* GXcopy */ 0xcc, /* src */
+ /* GXandInverted*/ 0x22, /* NOT src AND dst */
+ /* GXnoop */ 0xaa, /* dst */
+ /* GXxor */ 0x66, /* src XOR dst */
+ /* GXor */ 0xee, /* src OR dst */
+ /* GXnor */ 0x11, /* NOT src AND NOT dst */
+ /* GXequiv */ 0x99, /* NOT src XOR dst */
+ /* GXinvert */ 0x55, /* NOT dst */
+ /* GXorReverse */ 0xdd, /* src OR NOT dst */
+ /* GXcopyInverted*/ 0x33, /* NOT src */
+ /* GXorInverted */ 0xbb, /* NOT src OR dst */
+ /* GXnand */ 0x77, /* NOT src OR NOT dst */
+ /* GXset */ 0xff, /* 1 */
+};
+
+CARD8 chipsSolidRop[16] = {
+ /* GXclear */ 0x00, /* 0 */
+ /* GXand */ 0xa0, /* src AND dst */
+ /* GXandReverse */ 0x50, /* src AND NOT dst */
+ /* GXcopy */ 0xf0, /* src */
+ /* GXandInverted*/ 0x0a, /* NOT src AND dst */
+ /* GXnoop */ 0xaa, /* dst */
+ /* GXxor */ 0x5a, /* src XOR dst */
+ /* GXor */ 0xfa, /* src OR dst */
+ /* GXnor */ 0x05, /* NOT src AND NOT dst */
+ /* GXequiv */ 0xa5, /* NOT src XOR dst */
+ /* GXinvert */ 0x55, /* NOT dst */
+ /* GXorReverse */ 0xf5, /* src OR NOT dst */
+ /* GXcopyInverted*/ 0x0f, /* NOT src */
+ /* GXorInverted */ 0xaf, /* NOT src OR dst */
+ /* GXnand */ 0x5f, /* NOT src OR NOT dst */
+ /* GXset */ 0xff, /* 1 */
+};
+
+/* Definitions for the Chips and Technology BitBLT engine communication. */
+/* These are done using Memory Mapped IO, of the registers */
+/* BitBLT modes for register 93D0. */
+
+#ifdef HIQV
+#define ctPATCOPY 0xF0
+#define ctLEFT2RIGHT 0x000
+#define ctRIGHT2LEFT 0x100
+#define ctTOP2BOTTOM 0x000
+#define ctBOTTOM2TOP 0x200
+#define ctSRCSYSTEM 0x400
+#define ctDSTSYSTEM 0x800
+#define ctSRCMONO 0x1000
+#define ctBGTRANSPARENT 0x22000
+#define ctCOLORTRANSENABLE 0x4000
+#define ctCOLORTRANSDISABLE 0x0
+#define ctCOLORTRANSDST 0x8000
+#define ctCOLORTRANSROP 0x0
+#define ctCOLORTRANSEQUAL 0x10000L
+#define ctCOLORTRANSNEQUAL 0x0
+#define ctPATMONO 0x40000L
+#define ctPATSOLID 0x80000L
+#define ctPATSTART0 0x000000L
+#define ctPATSTART1 0x100000L
+#define ctPATSTART2 0x200000L
+#define ctPATSTART3 0x300000L
+#define ctPATSTART4 0x400000L
+#define ctPATSTART5 0x500000L
+#define ctPATSTART6 0x600000L
+#define ctPATSTART7 0x700000L
+#define ctSRCFG 0x000000L /* Where is this for the 65550?? */
+#else
+#define ctPATCOPY 0xF0
+#define ctTOP2BOTTOM 0x100
+#define ctBOTTOM2TOP 0x000
+#define ctLEFT2RIGHT 0x200
+#define ctRIGHT2LEFT 0x000
+#define ctSRCFG 0x400
+#define ctSRCMONO 0x800
+#define ctPATMONO 0x1000
+#define ctBGTRANSPARENT 0x2000
+#define ctSRCSYSTEM 0x4000
+#define ctPATSOLID 0x80000L
+#define ctPATSTART0 0x00000L
+#define ctPATSTART1 0x10000L
+#define ctPATSTART2 0x20000L
+#define ctPATSTART3 0x30000L
+#define ctPATSTART4 0x40000L
+#define ctPATSTART5 0x50000L
+#define ctPATSTART6 0x60000L
+#define ctPATSTART7 0x70000L
+#endif
+
+#define chipsFillPix(bpp,pixel) {\
+ if (bpp == 8) \
+ { \
+ pixel = pixel & 0xff; \
+ } \
+ else if (bpp == 16) \
+ { \
+ pixel = pixel & 0xffff; \
+ } \
+}
+
+static VOL8 *mmio;
+static CARD32 byteStride;
+static CARD32 bytesPerPixel;
+static CARD32 pixelStride;
+
+void
+chipsSet (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ chipsScreenInfo(pScreenPriv);
+
+ mmio = chipss->mmio_base;
+ byteStride = pScreenPriv->screen->fb[0].byteStride;
+ bytesPerPixel = pScreenPriv->screen->fb[0].bitsPerPixel >> 3;
+ pixelStride = pScreenPriv->screen->fb[0].pixelStride;
+}
+
+#ifdef HIQV
+#define CHIPS_BR0 0x00 /* offset */
+#define CHIPS_BR1 0x04 /* bg */
+#define CHIPS_BR2 0x08 /* fg */
+#define CHIPS_BR3 0x0c /* monochrome */
+#define CHIPS_BR4 0x10 /* bitblt */
+#define CHIPS_BR5 0x14 /* pattern addr */
+#define CHIPS_BR6 0x18 /* source addr */
+#define CHIPS_BR7 0x1c /* dst addr */
+#define CHIPS_BR8 0x20 /* dst w/h */
+#else
+#define CHIPS_DR0 0x83d0
+#define CHIPS_DR1 0x87d0
+#define CHIPS_DR2 0x8bd0
+#define CHIPS_DR3 0x8fd0
+#define CHIPS_DR4 0x93d0
+#define CHIPS_DR5 0x97d0
+#define CHIPS_DR6 0x9bd0
+#define CHIPS_DR7 0x9fd0
+#endif
+
+#define DBG(x)
+
+void
+chipsPitch (int src, int dst)
+{
+ CARD32 p;
+
+ p = ((dst & 0xffff) << 16) | (src & 0xffff);
+ DBG(ErrorF ("\tpitch 0x%x\n", p));
+#ifdef HIQV
+ *(VOL32 *) (mmio + CHIPS_BR0) = p;
+#else
+ *(VOL32 *) (mmio + CHIPS_DR0) = p;
+#endif
+}
+
+void
+chipsBg (Pixel bg)
+{
+ DBG(ErrorF ("\tbg 0x%x\n", bg));
+#ifdef HIQV
+ *(VOL32 *) (mmio + CHIPS_BR1) = bg & 0xffff;
+#else
+ *(VOL32 *) (mmio + CHIPS_DR2) = bg;
+#endif
+}
+
+void
+chipsFg (Pixel fg)
+{
+ DBG(ErrorF ("\tfg 0x%x\n", fg));
+#ifdef HIQV
+ *(VOL32 *) (mmio + CHIPS_BR2) = fg;
+#else
+ *(VOL32 *) (mmio + CHIPS_DR3) = fg;
+#endif
+}
+
+void
+chipsOp (CARD32 op)
+{
+ DBG(ErrorF ("\top 0x%x\n", op));
+#ifdef HIQV
+ *(VOL32 *) (mmio + CHIPS_BR4) = op;
+#else
+ *(VOL32 *) (mmio + CHIPS_DR4) = op;
+#endif
+}
+
+void
+chipsRopSolid (int rop)
+{
+ CARD32 op;
+
+ op = chipsSolidRop[rop] | ctTOP2BOTTOM | ctLEFT2RIGHT | ctPATSOLID | ctPATMONO;
+ chipsOp (op);
+}
+
+void
+chipsSrc (int addr)
+{
+ DBG(ErrorF ("\tsrc 0x%x\n", addr));
+#ifdef HIQV
+ *(VOL32 *) (mmio + CHIPS_BR6) = addr;
+#else
+ *(VOL32 *) (mmio + CHIPS_DR5) = addr;
+#endif
+}
+
+void
+chipsDst (int addr)
+{
+ DBG(ErrorF ("\tdst 0x%x\n", addr));
+#ifdef HIQV
+ *(VOL32 *) (mmio + CHIPS_BR7) = addr;
+#else
+ *(VOL32 *) (mmio + CHIPS_DR6) = addr;
+#endif
+}
+
+void
+chipsWidthHeightGo (int w, int h)
+{
+ DBG(ErrorF ("\twidth height %d/%d\n", w, h));
+#ifdef HIQV
+ *(VOL32 *) (mmio + CHIPS_BR8) = ((h & 0xffff) << 16) | (w & 0xffff);
+#else
+ *(VOL32 *) (mmio + CHIPS_DR7) = ((h & 0xffff) << 16) | (w & 0xffff);
+#endif
+}
+
+void
+chipsWaitIdle ()
+{
+#ifdef HIQV
+ int timeout = 0;
+ CARD8 tmp;
+ VOL32 *br4 = (VOL32 *) (mmio + CHIPS_BR4);
+
+ DBG(ErrorF ("\tBR4 0x%x 0x%x\n", mmio + CHIPS_BR4, *br4));
+ DBG(ErrorF ("\tXR20 0x%x\n", chipsReadXR (0, 0x20)));
+ for (;;)
+ {
+ if ((*br4 & 0x80000000) == 0)
+ break;
+ tmp = chipsReadXR (0, 0x20);
+ if ((tmp & 1) == 0)
+ break;
+ if (++timeout > 1000000)
+ {
+ ErrorF ("timeout\n");
+ tmp = chipsReadXR (0, 0x20);
+ chipsWriteXR (0, 0x20, tmp | 2);
+ sleep (1);
+ chipsWriteXR (0, 0x20, tmp);
+ sleep (1);
+ }
+ }
+#else
+ while (*(VOL32 *) (mmio + CHIPS_DR4) & 0x00100000)
+ ;
+#endif
+}
+
+Bool
+chipsPrepareSolid (DrawablePtr pDrawable,
+ int alu,
+ Pixel pm,
+ Pixel fg)
+{
+ FbBits depthMask;
+
+ DBG(ErrorF ("PrepareSolid %d 0x%x\n", alu, fg));
+ depthMask = FbFullMask(pDrawable->depth);
+ if ((pm & depthMask) != depthMask)
+ return FALSE;
+ else
+ {
+ chipsSet (pDrawable->pScreen);
+ chipsWaitIdle ();
+ chipsFillPix(pDrawable->bitsPerPixel,fg);
+ chipsFg (fg);
+ chipsBg (fg);
+ chipsRopSolid (alu);
+ chipsPitch (byteStride, byteStride);
+ return TRUE;
+ }
+}
+
+void
+chipsSolid (int x1, int y1, int x2, int y2)
+{
+ CARD32 dst;
+ int w, h;
+
+ DBG(ErrorF (" Solid %dx%d %dx%d\n", x1, y1, x2, y2));
+ dst = y1 * byteStride + x1 * bytesPerPixel;
+ w = (x2 - x1) * bytesPerPixel;
+ h = (y2 - y1);
+ chipsWaitIdle ();
+ chipsDst (dst);
+ chipsWidthHeightGo (w, h);
+}
+
+void
+chipsDoneSolid (void)
+{
+}
+
+static CARD32 copyOp;
+Bool
+chipsPrepareCopy (DrawablePtr pSrcDrawable,
+ DrawablePtr pDstDrawable,
+ int dx,
+ int dy,
+ int alu,
+ Pixel pm)
+{
+ FbBits depthMask;
+
+ DBG(ErrorF ("PrepareSolid %d 0x%x\n", alu, fg));
+ depthMask = FbFullMask(pDstDrawable->depth);
+ if ((pm & depthMask) != depthMask)
+ return FALSE;
+ else
+ {
+ copyOp = chipsBltRop[alu];
+ if (dy >= 0)
+ copyOp |= ctTOP2BOTTOM;
+ else
+ copyOp |= ctBOTTOM2TOP;
+ if (dx >= 0)
+ copyOp |= ctLEFT2RIGHT;
+ else
+ copyOp |= ctRIGHT2LEFT;
+ chipsSet (pDstDrawable->pScreen);
+ chipsWaitIdle ();
+ chipsOp (copyOp);
+ chipsPitch (byteStride, byteStride);
+ return TRUE;
+ }
+}
+
+void
+chipsCopy (int srcX,
+ int srcY,
+ int dstX,
+ int dstY,
+ int w,
+ int h)
+{
+ int src, dst;
+ if ((copyOp & (ctTOP2BOTTOM|ctBOTTOM2TOP)) == ctBOTTOM2TOP)
+ {
+ src = (srcY + h - 1) * byteStride;
+ dst = (dstY + h - 1) * byteStride;
+ }
+ else
+ {
+ src = srcY * byteStride;
+ dst = dstY * byteStride;
+ }
+ if ((copyOp & (ctLEFT2RIGHT|ctRIGHT2LEFT)) == ctRIGHT2LEFT)
+ {
+ src = src + (srcX + w) * bytesPerPixel - 1;
+ dst = dst + (dstX + w) * bytesPerPixel - 1;
+ }
+ else
+ {
+ src = src + srcX * bytesPerPixel;
+ dst = dst + dstX * bytesPerPixel;
+ }
+ chipsWaitIdle ();
+ chipsSrc (src);
+ chipsDst (dst);
+ chipsWidthHeightGo (w * bytesPerPixel, h);
+}
+
+void
+chipsDoneCopy (void)
+{
+}
+
+KaaScreenPrivRec chipsKaa = {
+ chipsPrepareSolid,
+ chipsSolid,
+ chipsDoneSolid,
+
+ chipsPrepareCopy,
+ chipsCopy,
+ chipsDoneCopy,
+};
+
+Bool
+chipsDrawInit (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ chipsScreenInfo(pScreenPriv);
+
+ switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
+ case 8:
+ case 16:
+ break;
+ default:
+ return FALSE;
+ }
+
+ if (!kaaDrawInit (pScreen, &chipsKaa))
+ return FALSE;
+
+ return TRUE;
+}
+
+void
+chipsDrawEnable (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ chipsScreenInfo(pScreenPriv);
+ CARD8 mode;
+
+ switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
+ case 8:
+ mode = 0x00;
+ break;
+ case 16:
+ mode = 0x10;
+ break;
+ }
+ chipsSet (pScreen);
+ chipsWaitIdle ();
+ chipsWriteXR (chipss, 0x20, mode);
+
+ KdMarkSync (pScreen);
+}
+
+void
+chipsDrawDisable (ScreenPtr pScreen)
+{
+}
+
+void
+chipsDrawFini (ScreenPtr pScreen)
+{
+}
+
+void
+chipsDrawSync (ScreenPtr pScreen)
+{
+ chipsSet (pScreen);
+ chipsWaitIdle ();
+}
diff --git a/hw/kdrive/chips/chipsstub.c b/hw/kdrive/chips/chipsstub.c
new file mode 100644
index 000000000..5c8a6d4c6
--- /dev/null
+++ b/hw/kdrive/chips/chipsstub.c
@@ -0,0 +1,59 @@
+/*
+ * Id: chipsstub.c,v 1.1 1999/11/02 08:19:15 keithp Exp $
+ *
+ * Copyright 1999 SuSE, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of SuSE not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. SuSE makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Keith Packard, SuSE, Inc.
+ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/chips/chipsstub.c,v 1.5 2000/11/29 08:42:25 keithp Exp $ */
+
+#include "chips.h"
+
+extern int chips_clk, chips_mclk;
+
+void
+InitCard (char *name)
+{
+ KdCardAttr attr;
+
+ KdCardInfoAdd (&chipsFuncs, &attr, 0);
+}
+
+void
+InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
+{
+ KdInitOutput (pScreenInfo, argc, argv);
+}
+
+void
+InitInput (int argc, char **argv)
+{
+ KdInitInput (&Ps2MouseFuncs, &LinuxKeyboardFuncs);
+}
+
+int
+ddxProcessArgument (int argc, char **argv, int i)
+{
+ int ret;
+
+ if (!(ret = vesaProcessArgument (argc, argv, i)))
+ ret = KdProcessArgument(argc, argv, i);
+ return ret;
+}
diff --git a/hw/kdrive/vesa/vbe.c b/hw/kdrive/vesa/vbe.c
index cb6d0d3a3..e0cdd0775 100644
--- a/hw/kdrive/vesa/vbe.c
+++ b/hw/kdrive/vesa/vbe.c
@@ -19,7 +19,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
-/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vbe.c,v 1.7 2000/11/19 20:51:12 keithp Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vbe.c,v 1.9 2001/05/29 04:54:12 keithp Exp $ */
#include "vesa.h"
@@ -251,7 +251,7 @@ VbeGetMode(Vm86InfoPtr vi, int *mode)
}
void *
-VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size)
+VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size, CARD32 *ret_phys)
{
U8 *fb;
VbeInfoBlock vib;
@@ -270,6 +270,7 @@ VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size)
size = 1024 * 64L * vib.TotalMemory;
*ret_size = size;
+ *ret_phys = vmib.PhysBasePtr;
before = vmib.PhysBasePtr % pagesize;
after = pagesize - ((vmib.PhysBasePtr + size) % pagesize);
@@ -501,6 +502,48 @@ windowB:
return ((U8*)&(LM(vi, MAKE_POINTER(vbe->vmib.WinBSegment, 0)))) + offset - vbe->windowB_offset;
}
+static const int VbeDPMSModes[4] = {
+ 0x00, /* KD_DPMS_NORMAL */
+ 0x01, /* KD_DPMS_STANDBY */
+ 0x02, /* KD_DPMS_SUSPEND */
+ 0x04, /* KD_DPMS_POWERDOWN */
+};
+
+Bool
+VbeDPMS(Vm86InfoPtr vi, VbeInfoBlock *vib, int mode)
+{
+ int code;
+
+ /*
+ * Check which modes are supported
+ */
+ vi->vms.regs.eax = 0x4f10;
+ vi->vms.regs.ebx = 0x0000;
+ vi->vms.regs.es = 0;
+ vi->vms.regs.edi = 0;
+ code = VbeDoInterrupt10 (vi);
+ if (code < 0)
+ {
+ ErrorF ("No DPMS Support\n");
+ return FALSE;
+ }
+ /* Skip this stage if it's not supported */
+ if (((vi->vms.regs.ebx >> 4) & VbeDPMSModes[mode]) != VbeDPMSModes[mode])
+ return FALSE;
+
+ /* Select this mode */
+ vi->vms.regs.eax = 0x4f10;
+ vi->vms.regs.ebx = (VbeDPMSModes[mode] << 8) | 0x01;
+ code = VbeDoInterrupt10 (vi);
+ if (code < 0)
+ {
+ ErrorF ("DPMS failed %d\n", code);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
int
VbeReportVib(Vm86InfoPtr vi, VbeInfoBlock *vib)
{
diff --git a/hw/kdrive/vesa/vbe.h b/hw/kdrive/vesa/vbe.h
index bf347fc6b..6e74cc3b5 100644
--- a/hw/kdrive/vesa/vbe.h
+++ b/hw/kdrive/vesa/vbe.h
@@ -19,7 +19,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
-/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vbe.h,v 1.5 2000/10/20 00:19:50 keithp Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vbe.h,v 1.6 2001/05/29 04:54:12 keithp Exp $ */
#ifndef _VBE_H
#define _VBE_H
@@ -134,7 +134,7 @@ int
VbeGetMode(Vm86InfoPtr vi, int *mode);
void *
-VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *size);
+VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *size, CARD32 *phys);
void
VbeUnmapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, void *fb);
diff --git a/hw/kdrive/vesa/vesa.c b/hw/kdrive/vesa/vesa.c
index ab8ea41e5..960de6795 100644
--- a/hw/kdrive/vesa/vesa.c
+++ b/hw/kdrive/vesa/vesa.c
@@ -19,7 +19,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
-/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesa.c,v 1.15 2001/07/20 19:35:30 keithp Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesa.c,v 1.16 2001/07/24 19:06:04 keithp Exp $ */
#include "vesa.h"
#ifdef RANDR
@@ -33,6 +33,7 @@ Bool vesa_shadow = FALSE;
Bool vesa_linear_fb = TRUE;
Bool vesa_restore = FALSE;
Bool vesa_verbose = FALSE;
+Bool vesa_force_text = FALSE;
#define VesaPriv(scr) ((VesaScreenPrivPtr) (scr)->driver)
@@ -959,11 +960,13 @@ vesaMapFramebuffer (KdScreenInfo *screen)
if (pscr->mode.vbe)
pscr->fb = VbeMapFramebuffer(priv->vi, priv->vbeInfo,
pscr->mode.mode,
- &pscr->fb_size);
+ &pscr->fb_size,
+ &pscr->fb_phys);
else
pscr->fb = VgaMapFramebuffer (priv->vi,
pscr->mode.mode,
- &pscr->fb_size);
+ &pscr->fb_size,
+ &pscr->fb_phys);
if (!pscr->fb)
return FALSE;
break;
@@ -1451,11 +1454,13 @@ vesaEnable(ScreenPtr pScreen)
if (pscr->mode.vbe)
pscr->fb = VbeMapFramebuffer(priv->vi, priv->vbeInfo,
pscr->mode.mode,
- &pscr->fb_size);
+ &pscr->fb_size,
+ &pscr->fb_phys);
else
pscr->fb = VgaMapFramebuffer (priv->vi,
pscr->mode.mode,
- &pscr->fb_size);
+ &pscr->fb_size,
+ &pscr->fb_phys);
if (!pscr->fb)
return FALSE;
screen->fb[0].frameBuffer = (CARD8 *)(pscr->fb);
@@ -1501,6 +1506,77 @@ vesaEnable(ScreenPtr pScreen)
return TRUE;
}
+#ifndef TOSHIBA_SMM
+
+# ifdef linux
+# define TOSHIBA_SMM 1
+# endif
+
+# ifndef TOSHIBA_SMM
+# define TOSHIBA_SMM 0
+# endif
+
+#endif
+
+#if TOSHIBA_SMM
+/*
+ * Toshiba laptops use a special interface to operate the backlight
+ */
+#include <sys/ioctl.h>
+#define TOSH_PROC "/proc/toshiba"
+#define TOSH_DEVICE "/dev/toshiba"
+#define TOSH_SMM _IOWR('t', 0x90, 24)
+
+typedef struct {
+ unsigned int eax;
+ unsigned int ebx __attribute__ ((packed));
+ unsigned int ecx __attribute__ ((packed));
+ unsigned int edx __attribute__ ((packed));
+ unsigned int esi __attribute__ ((packed));
+ unsigned int edi __attribute__ ((packed));
+} SMMRegisters;
+
+#define HCI_BACKLIGHT 0x0002
+#define HCI_DISABLE 0x0000
+#define HCI_ENABLE 0x0001
+#define HCI_GET 0xfe00,
+#define HCI_SET 0xff00
+
+Bool
+toshibaDPMS (ScreenPtr pScreen, int mode)
+{
+ SMMRegisters regs;
+ static int fd;
+
+ if (!fd)
+ fd = open (TOSH_DEVICE, 2);
+ if (fd < 0)
+ return FALSE;
+ regs.eax = HCI_SET;
+ regs.ebx = HCI_BACKLIGHT;
+ regs.ecx = mode ? HCI_DISABLE : HCI_ENABLE;
+ if (ioctl (fd, TOSH_SMM, &regs) < 0)
+ return FALSE;
+ return TRUE;
+}
+#endif /* TOSHIBA_SMM */
+
+Bool
+vesaDPMS (ScreenPtr pScreen, int mode)
+{
+ KdScreenPriv(pScreen);
+ VesaCardPrivPtr priv = pScreenPriv->card->driver;
+ VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
+
+#if TOSHIBA_SMM
+ if (toshibaDPMS (pScreen, mode))
+ return TRUE;
+#endif
+ if (pscr->mode.vbe)
+ return VbeDPMS (priv->vi, priv->vbeInfo, mode);
+ return FALSE;
+}
+
void
vesaDisable(ScreenPtr pScreen)
{
@@ -1569,6 +1645,13 @@ vesaRestore(KdCardInfo *card)
VesaCardPrivPtr priv = card->driver;
int n;
+ if (vesa_force_text)
+ {
+ if (vesa_verbose)
+ ErrorF ("Forcing switch back to mode 3 text\n");
+ priv->old_vbe_mode = -1;
+ priv->old_vga_mode = 3;
+ }
for (n = 0; n < priv->nmode; n++)
if (priv->modes[n].vbe && priv->modes[n].mode == (priv->old_vbe_mode&0x3fff))
break;
@@ -1774,6 +1857,9 @@ vesaProcessArgument (int argc, char **argv, int i)
} else if(!strcmp(argv[i], "-verbose")) {
vesa_verbose = TRUE;
return 1;
+ } else if(!strcmp(argv[i], "-force-text")) {
+ vesa_force_text = TRUE;
+ return 1;
}
return 0;
diff --git a/hw/kdrive/vesa/vesa.h b/hw/kdrive/vesa/vesa.h
index b84d58d2b..fc8f7fa19 100644
--- a/hw/kdrive/vesa/vesa.h
+++ b/hw/kdrive/vesa/vesa.h
@@ -19,7 +19,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
-/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesa.h,v 1.10 2001/06/04 09:45:42 keithp Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesa.h,v 1.11 2001/07/20 19:35:30 keithp Exp $ */
#ifndef _VESA_H_
#define _VESA_H_
@@ -101,6 +101,7 @@ typedef struct _VesaScreenPriv {
int layerKind;
void *fb;
int fb_size;
+ CARD32 fb_phys;
LayerPtr pLayer;
} VesaScreenPrivRec, *VesaScreenPrivPtr;
@@ -137,6 +138,9 @@ vesaFinishInitScreen(ScreenPtr pScreen);
Bool
vesaEnable(ScreenPtr pScreen);
+Bool
+vesaDPMS (ScreenPtr pScreen, int mode);
+
void
vesaDisable(ScreenPtr pScreen);
diff --git a/hw/kdrive/vesa/vesainit.c b/hw/kdrive/vesa/vesainit.c
index 3019e4f12..a409fc4fb 100644
--- a/hw/kdrive/vesa/vesainit.c
+++ b/hw/kdrive/vesa/vesainit.c
@@ -19,7 +19,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
-/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesainit.c,v 1.5 2000/12/08 21:40:29 keithp Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vesainit.c,v 1.6 2001/06/04 09:45:42 keithp Exp $ */
#include "vesa.h"
@@ -29,7 +29,7 @@ const KdCardFuncs vesaFuncs = {
vesaInitScreen, /* initScreen */
vesaPreserve, /* preserve */
vesaEnable, /* enable */
- 0, /* dpms */
+ vesaDPMS, /* dpms */
vesaDisable, /* disable */
vesaRestore, /* restore */
vesaScreenFini, /* scrfini */
diff --git a/hw/kdrive/vesa/vga.c b/hw/kdrive/vesa/vga.c
index 24b23e885..a87b70a2d 100644
--- a/hw/kdrive/vesa/vga.c
+++ b/hw/kdrive/vesa/vga.c
@@ -1,5 +1,5 @@
/*
- * $XFree86$
+ * $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vga.c,v 1.1 2000/10/20 00:19:51 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
@@ -225,12 +225,13 @@ VgaSetWindow (Vm86InfoPtr vi, int vmode, int bytes, int mode, int *size)
}
void *
-VgaMapFramebuffer (Vm86InfoPtr vi, int vmode, int *size)
+VgaMapFramebuffer (Vm86InfoPtr vi, int vmode, int *size, CARD32 *ret_phys)
{
if (VGA_FB(vmode) == 0xa0000)
*size = 0x10000;
else
*size = 0x4000;
+ *ret_phys = VGA_FB(vmode);
return &LM(vi,VGA_FB(vmode));
}
diff --git a/hw/kdrive/vesa/vga.h b/hw/kdrive/vesa/vga.h
index 0637c2177..873c1ee95 100644
--- a/hw/kdrive/vesa/vga.h
+++ b/hw/kdrive/vesa/vga.h
@@ -1,5 +1,5 @@
/*
- * $XFree86$
+ * $XFree86: xc/programs/Xserver/hw/kdrive/vesa/vga.h,v 1.1 2000/10/20 00:19:51 keithp Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
@@ -53,7 +53,7 @@ void *
VgaSetWindow (Vm86InfoPtr vi, int vmode, int bytes, int mode, int *size);
void *
-VgaMapFramebuffer (Vm86InfoPtr vi, int vmode, int *size);
+VgaMapFramebuffer (Vm86InfoPtr vi, int vmode, int *size, CARD32 *phys);
void
VgaUnmapFramebuffer (Vm86InfoPtr vi);