diff options
author | Anders Carlsson <andersca@gnome.org> | 2003-10-11 19:36:13 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@gnome.org> | 2003-10-11 19:36:13 +0000 |
commit | ab3305d0ac805d0c9e917c35b316d9b58dde2187 (patch) | |
tree | c8dfa42113fb5c5ee6bd1d3bb7cf1d42571c75bc | |
parent | ed98d3814ee65cd9fd18eeadbd20c8fc6b4ab342 (diff) |
Add ATI Rage 128 server.
-rw-r--r-- | hw/kdrive/Makefile.am | 2 | ||||
-rw-r--r-- | hw/kdrive/r128/Makefile.am | 45 | ||||
-rw-r--r-- | hw/kdrive/r128/r128.c | 256 | ||||
-rw-r--r-- | hw/kdrive/r128/r128.h | 121 | ||||
-rw-r--r-- | hw/kdrive/r128/r128draw.c | 290 | ||||
-rw-r--r-- | hw/kdrive/r128/r128stub.c | 59 |
6 files changed, 772 insertions, 1 deletions
diff --git a/hw/kdrive/Makefile.am b/hw/kdrive/Makefile.am index 3d0ae8a3b..0dd95f1ee 100644 --- a/hw/kdrive/Makefile.am +++ b/hw/kdrive/Makefile.am @@ -1,5 +1,5 @@ if KDRIVEVESA -VESA_SUBDIRS = vesa mach64 mga nvidia +VESA_SUBDIRS = vesa mach64 mga nvidia r128 endif SUBDIRS = \ diff --git a/hw/kdrive/r128/Makefile.am b/hw/kdrive/r128/Makefile.am new file mode 100644 index 000000000..9a816a496 --- /dev/null +++ b/hw/kdrive/r128/Makefile.am @@ -0,0 +1,45 @@ +INCLUDES = \ + -I$(top_srcdir)/fb \ + -I$(top_srcdir)/hw/kdrive/src \ + -I$(top_srcdir)/hw/kdrive/vesa \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/mi \ + -I$(top_srcdir)/miext/layer \ + -I$(top_srcdir)/miext/shadow \ + -I$(top_srcdir)/randr \ + -I$(top_srcdir)/render \ + $(XSERVER_CFLAGS) + +bin_PROGRAMS = Xr128 + +noinst_LIBRARIES = libr128.a + +libr128_a_SOURCES = \ + r128draw.c \ + r128.c \ + r128.h + +Xr128_SOURCES = \ + r128stub.c + +Xr128_LDADD = \ + $(top_builddir)/hw/kdrive/r128/libr128.a \ + $(top_builddir)/hw/kdrive/vesa/libvesa.a \ + $(top_builddir)/dix/libdix.a \ + $(top_builddir)/os/libos.a \ + $(top_builddir)/miext/layer/liblayer.a \ + $(top_builddir)/hw/kdrive/src/libkdrive.a \ + $(top_builddir)/hw/kdrive/linux/liblinux.a \ + $(top_builddir)/miext/shadow/libshadow.a \ + $(top_builddir)/randr/librandr.a \ + $(top_builddir)/render/librender.a \ + $(top_builddir)/xfixes/libxfixes.a \ + $(top_builddir)/fb/libfb.a \ + $(top_builddir)/mi/libmi.a \ + $(top_builddir)/Xext/libXext.a \ + $(top_builddir)/randr/librandr.a \ + $(top_builddir)/render/librender.a \ + $(top_builddir)/xfixes/libxfixes.a \ + $(top_builddir)/dix/libxpstubs.a \ + $(XSERVER_LIBS) \ + -lm -lz diff --git a/hw/kdrive/r128/r128.c b/hw/kdrive/r128/r128.c new file mode 100644 index 000000000..10974cc7f --- /dev/null +++ b/hw/kdrive/r128/r128.c @@ -0,0 +1,256 @@ +/* + * $Id$ + * + * Copyright © 2003 Anders Carlsson + * + * 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 Anders Carlsson not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Anders Carlsson makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ANDERS CARLSSON 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. + */ +/* $Header$ */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include "r128.h" + +Bool +r128CardInit (KdCardInfo *card) +{ + R128CardInfo *r128c; + + r128c = (R128CardInfo *) xalloc (sizeof (R128CardInfo)); + if (!r128c) + return FALSE; + + r128MapReg (card, r128c); + + if (!vesaInitialize (card, &r128c->vesa)) + { + xfree (r128c); + return FALSE; + } + + r128c->fifo_size = 0; + + card->driver = r128c; + + return TRUE; +} + +Bool +r128ScreenInit (KdScreenInfo *screen) +{ + R128CardInfo *r128c = screen->card->driver; + R128ScreenInfo *r128s; + int screen_size, memory; + + r128s = (R128ScreenInfo *) xalloc (sizeof (R128ScreenInfo)); + if (!r128s) + return FALSE; + memset (r128s, '\0', sizeof (R128ScreenInfo)); + if (!vesaScreenInitialize (screen, &r128s->vesa)) + { + xfree (r128s); + return FALSE; + } +#if 0 + /* if (!r128c->reg) + screen->dumb = TRUE; */ + + if (r128s->vesa.mapping != VESA_LINEAR) + screen->dumb = TRUE; + + fprintf (stderr, "vesa mapping is %d\n", r128s->vesa.mapping); +#endif + r128s->screen = r128s->vesa.fb; + + memory = r128s->vesa.fb_size; + screen_size = screen->fb[0].byteStride * screen->height; + + memory -= screen_size; + if (memory > screen->fb[0].byteStride) + { + r128s->off_screen = r128s->screen + screen_size; + r128s->off_screen_size = memory; + } + else + { + r128s->off_screen = 0; + r128s->off_screen_size = 0; + } + screen->driver = r128s; + return TRUE; +} + +Bool +r128InitScreen (ScreenPtr pScreen) +{ + return vesaInitScreen (pScreen); +} + +Bool +r128FinishInitScreen (ScreenPtr pScreen) +{ + Bool ret; + + ret = vesaFinishInitScreen (pScreen); + + return ret; +} + +void +r128Preserve (KdCardInfo *card) +{ + R128CardInfo *r128c = card->driver; + + vesaPreserve (card); +} + +Bool +r128MapReg (KdCardInfo *card, R128CardInfo *r128c) +{ + r128c->reg_base = (CARD8 *) KdMapDevice (R128_REG_BASE (card), + R128_REG_SIZE (card)); + + if (!r128c->reg_base) + { + return FALSE; + } + + KdSetMappedMode (R128_REG_BASE (card), + R128_REG_SIZE (card), + KD_MAPPED_MODE_REGISTERS); + + return TRUE; +} + +void +r128UnmapReg (KdCardInfo *card, R128CardInfo *r128c) +{ + if (r128c->reg_base) + { + KdResetMappedMode (R128_REG_BASE (card), + R128_REG_SIZE (card), + KD_MAPPED_MODE_REGISTERS); + KdUnmapDevice ((void *) r128c->reg_base, R128_REG_SIZE (card)); + r128c->reg_base = 0; + } +} + +void +r128SetMMIO (KdCardInfo *card, R128CardInfo *r128c) +{ + if (!r128c->reg_base) + r128MapReg (card, r128c); +} + +void +r128ResetMMIO (KdCardInfo *card, R128CardInfo *r128c) +{ + r128UnmapReg (card, r128c); +} + +Bool +r128Enable (ScreenPtr pScreen) +{ + KdScreenPriv (pScreen); + R128CardInfo *r128c = pScreenPriv->card->driver; + + if (!vesaEnable (pScreen)) + return FALSE; + + r128SetMMIO (pScreenPriv->card, r128c); + r128DPMS (pScreen, KD_DPMS_NORMAL); + + return TRUE; +} + +void +r128Disable (ScreenPtr pScreen) +{ + KdScreenPriv (pScreen); + R128CardInfo *r128c = pScreenPriv->card->driver; + + r128ResetMMIO (pScreenPriv->card, r128c); + vesaDisable (pScreen); +} + +Bool +r128DPMS (ScreenPtr pScreen, int mode) +{ + /* XXX */ + return TRUE; +} + +void +r128Restore (KdCardInfo *card) +{ + R128CardInfo *r128c = card->driver; + + r128ResetMMIO (card, r128c); + vesaRestore (card); +} + +void +r128ScreenFini (KdScreenInfo *screen) +{ + R128ScreenInfo *r128s = (R128ScreenInfo *) screen->driver; + + vesaScreenFini (screen); + xfree (r128s); + screen->driver = 0; +} + +void +r128CardFini (KdCardInfo *card) +{ + R128CardInfo *r128c = (R128CardInfo *)card->driver; + + r128UnmapReg (card, r128c); + vesaCardFini (card); +} + +KdCardFuncs r128Funcs = { + r128CardInit, /* cardinit */ + r128ScreenInit, /* scrinit */ + r128InitScreen, /* initScreen */ + r128Preserve, /* preserve */ + r128Enable, /* enable */ + r128DPMS, /* dpms */ + r128Disable, /* disable */ + r128Restore, /* restore */ + r128ScreenFini, /* scrfini */ + r128CardFini, /* cardfini */ + + 0, /* initCursor */ + 0, /* enableCursor */ + 0, /* disableCursor */ + 0, /* finiCursor */ + 0, /* recolorCursor */ + + r128DrawInit, /* initAccel */ + r128DrawEnable, /* enableAccel */ + r128DrawSync, /* syncAccel */ + r128DrawDisable, /* disableAccel */ + r128DrawFini, /* finiAccel */ + + vesaGetColors, /* getColors */ + vesaPutColors, /* putColors */ + + r128FinishInitScreen, /* finishInitScreen */ +}; + diff --git a/hw/kdrive/r128/r128.h b/hw/kdrive/r128/r128.h new file mode 100644 index 000000000..06b3d0286 --- /dev/null +++ b/hw/kdrive/r128/r128.h @@ -0,0 +1,121 @@ +/* + * $Id$ + * + * Copyright © 2003 Anders Carlsson + * + * 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 Anders Carlsson not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Anders Carlsson makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ANDERS CARLSSON 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. + */ +/* $Header$ */ + +#ifndef _R128_H_ +#define _R128_H_ +#include <vesa.h> + +#define R128_REG_BASE(c) ((c)->attr.address[1]) +#define R128_REG_SIZE(c) (0x4000) + +#define R128_OUT32(mmio, a, v) (*(VOL32 *) ((mmio) + (a)) = (v)) +#define R128_IN32(mmio, a) (*(VOL32 *) ((mmio) + (a))) + +#define R128_REG_GUI_STAT 0x1740 +#define R128_REG_DEFAULT_OFFSET 0x16e0 +#define R128_REG_DEFAULT_PITCH 0x16e4 +#define R128_REG_DP_GUI_MASTER_CNTL 0x146c +#define R128_REG_DP_BRUSH_FRGD_CLR 0x147c +#define R128_REG_DP_WRITE_MASK 0x16cc +#define R128_REG_DP_CNTL 0x16c0 +#define R128_REG_DST_WIDTH_HEIGHT 0x1598 +#define R128_REG_DST_Y_X 0x1438 +#define R128_REG_PC_NGUI_CTLSTAT 0x0184 +#define R128_REG_DST_HEIGHT_WIDTH 0x143c +#define R128_REG_SRC_Y_X 0x1434 + +#define R128_GMC_DST_DATATYPE_SHIFT 8 +#define R128_GMC_CLR_CMP_CNTL_DIS (1 << 28) +#define R128_GMC_AUX_CLIP_DIS (1 << 29) +#define R128_GMC_BRUSH_SOLID_COLOR (13 << 4) +#define R128_GMC_SRC_DATATYPE_COLOR (3 << 12) +#define R128_GMC_ROP3_SHIFT 16 +#define R128_DST_X_LEFT_TO_RIGHT (1 << 0) +#define R128_DST_Y_TOP_TO_BOTTOM (1 << 1) +#define R128_GUI_ACTIVE (1 << 31) +#define R128_PC_BUSY (1 << 31) +#define R128_DP_SRC_SOURCE_MEMORY (2 << 24) + +typedef volatile CARD8 VOL8; +typedef volatile CARD16 VOL16; +typedef volatile CARD32 VOL32; + +typedef struct _r128CardInfo { + VesaCardPrivRec vesa; + CARD8 *reg_base; + int fifo_size; +} R128CardInfo; + +#define getR128CardInfo(kd) ((R128CardInfo *) ((kd)->card->driver)) +#define r128CardInfo(kd) R128CardInfo *r128c = getR128CardInfo(kd) + +typedef struct _r128ScreenInfo { + VesaScreenPrivRec vesa; + CARD8 *screen; + CARD8 *off_screen; + int off_screen_size; + + int pitch; + int datatype; + + int dp_gui_master_cntl; +} R128ScreenInfo; + +#define getR128ScreenInfo(kd) ((R128ScreenInfo *) ((kd)->screen->driver)) +#define r128ScreenInfo(kd) R128ScreenInfo *r128s = getR128ScreenInfo(kd) + +Bool +r128MapReg (KdCardInfo *card, R128CardInfo *r128c); + +void +r128UnmapReg (KdCardInfo *card, R128CardInfo *r128c); + +void +r128SetMMIO (KdCardInfo *card, R128CardInfo *r128c); + +void +r128ResetMMIO (KdCardInfo *card, R128CardInfo *r128c); + +Bool +r128DrawSetup (ScreenPtr pScreen); + +Bool +r128DrawInit (ScreenPtr pScreen); + +void +r128DrawEnable (ScreenPtr pScreen); + +void +r128DrawSync (ScreenPtr pScreen); + +void +r128DrawDisable (ScreenPtr pScreen); + +void +r128DrawFini (ScreenPtr pScreen); + +extern KdCardFuncs r128Funcs; + +#endif /* _R128_H_ */ diff --git a/hw/kdrive/r128/r128draw.c b/hw/kdrive/r128/r128draw.c new file mode 100644 index 000000000..3dd806979 --- /dev/null +++ b/hw/kdrive/r128/r128draw.c @@ -0,0 +1,290 @@ +/* + * $Id$ + * + * Copyright © 2003 Anders Carlsson + * + * 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 Anders Carlsson not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Anders Carlsson makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ANDERS CARLSSON 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. + */ +/* $Header$ */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include "r128.h" + +CARD8 r128SolidRop[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 */ +}; + +CARD8 r128BltRop[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 */ +}; + +int copydx, copydy; +int fifo_size; +char *mmio; + +void +r128WaitAvail (int n) +{ + int i; + + if (fifo_size < n) + { + while ((fifo_size = R128_IN32 (mmio, R128_REG_GUI_STAT) & 0xfff) < n) + ; + } + + fifo_size -= n; +} + +void +r128WaitIdle (void) +{ + int tries; + + r128WaitAvail (64); + + tries = 1000000; + while (tries--) + { + if ((R128_IN32 (mmio, R128_REG_GUI_STAT) & R128_GUI_ACTIVE) == 0) + break; + } + + R128_OUT32 (mmio, R128_REG_PC_NGUI_CTLSTAT, + R128_IN32 (mmio, R128_REG_PC_NGUI_CTLSTAT | 0xff)); + + tries = 1000000; + while (tries--) + { + if ((R128_IN32 (mmio, R128_REG_PC_NGUI_CTLSTAT) & R128_PC_BUSY) != R128_PC_BUSY) + break; + } + +} + +static Bool +r128Setup (ScreenPtr pScreen, int wait) +{ + KdScreenPriv (pScreen); + r128ScreenInfo (pScreenPriv); + r128CardInfo (pScreenPriv); + + fifo_size = 0; + + mmio = r128c->reg_base; + + if (!mmio) + return FALSE; + + r128WaitAvail (2); + R128_OUT32 (mmio, R128_REG_DEFAULT_OFFSET, 0); + R128_OUT32 (mmio, R128_REG_DEFAULT_PITCH, r128s->pitch); + +} + +Bool +r128PrepareSolid (DrawablePtr pDrawable, int alu, Pixel pm, Pixel fg) +{ + KdScreenPriv (pDrawable->pScreen); + r128ScreenInfo (pScreenPriv); + + r128Setup (pDrawable->pScreen, 4); + R128_OUT32 (mmio, R128_REG_DP_GUI_MASTER_CNTL, r128s->dp_gui_master_cntl + | R128_GMC_BRUSH_SOLID_COLOR + | R128_GMC_SRC_DATATYPE_COLOR + | (r128SolidRop[alu] << R128_GMC_ROP3_SHIFT)); + R128_OUT32 (mmio, R128_REG_DP_BRUSH_FRGD_CLR, fg); + R128_OUT32 (mmio, R128_REG_DP_WRITE_MASK, pm); + R128_OUT32 (mmio, R128_REG_DP_CNTL, + (R128_DST_X_LEFT_TO_RIGHT | R128_DST_Y_TOP_TO_BOTTOM)); + + return TRUE; +} + +void +r128Solid (int x1, int y1, int x2, int y2) +{ + r128WaitAvail (2); + R128_OUT32 (mmio, R128_REG_DST_Y_X, (y1 << 16) | x1); + R128_OUT32 (mmio, R128_REG_DST_WIDTH_HEIGHT, ((x2 - x1) << 16) | (y2 - y1)); + +} + +void +r128DoneSolid (void) +{ +} + +Bool +r128PrepareCopy (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, int dx, int dy, int alu, Pixel pm) +{ + KdScreenPriv (pSrcDrawable->pScreen); + r128ScreenInfo (pScreenPriv); + + copydx = dx; + copydy = dy; + + r128Setup (pSrcDrawable->pScreen, 3); + R128_OUT32 (mmio, R128_REG_DP_GUI_MASTER_CNTL, r128s->dp_gui_master_cntl + | R128_GMC_BRUSH_SOLID_COLOR + | R128_GMC_SRC_DATATYPE_COLOR + | (r128BltRop[alu] << R128_GMC_ROP3_SHIFT) + | R128_DP_SRC_SOURCE_MEMORY); + R128_OUT32 (mmio, R128_REG_DP_WRITE_MASK, pm); + R128_OUT32 (mmio, R128_REG_DP_CNTL, + ((dx >= 0 ? R128_DST_X_LEFT_TO_RIGHT : 0) + | (dy >= 0 ? R128_DST_Y_TOP_TO_BOTTOM : 0))); + + + return TRUE; +} + +void +r128Copy (int srcX, int srcY, int dstX, int dstY, int w, int h) +{ + if (copydx < 0) + { + srcX += w - 1; + dstX += w - 1; + } + + if (copydy < 0) + { + srcY += h - 1; + dstY += h - 1; + } + + r128WaitAvail (3); + R128_OUT32 (mmio, R128_REG_SRC_Y_X, (srcY << 16) | srcX); + R128_OUT32 (mmio, R128_REG_DST_Y_X, (dstY << 16) | dstX); + R128_OUT32 (mmio, R128_REG_DST_HEIGHT_WIDTH, (h << 16) | w); +} + +void +r128DoneCopy (void) +{ +} + +KaaScreenPrivRec r128Kaa = { + r128PrepareSolid, + r128Solid, + r128DoneSolid, + + r128PrepareCopy, + r128Copy, + r128DoneCopy, +}; + +Bool +r128DrawInit (ScreenPtr pScreen) +{ + KdScreenPriv(pScreen); + + if (!kaaDrawInit (pScreen, &r128Kaa)) + return FALSE; + + return TRUE; +} + +void +r128DrawEnable (ScreenPtr pScreen) +{ + KdScreenPriv (pScreen); + r128ScreenInfo (pScreenPriv); + + r128s->pitch = pScreenPriv->screen->width >> 3; + + switch (pScreenPriv->screen->fb[0].depth) { + case 8: + r128s->datatype = 2; + break; + case 15: + r128s->datatype = 3; + break; + case 16: + r128s->datatype = 4; + break; + case 24: + r128s->datatype = 5; + break; + case 32: + r128s->datatype = 6; + break; + default: + FatalError ("unsupported pixel format"); + } + + r128s->dp_gui_master_cntl = ((r128s->datatype << R128_GMC_DST_DATATYPE_SHIFT) + | R128_GMC_CLR_CMP_CNTL_DIS + | R128_GMC_AUX_CLIP_DIS); + + KdMarkSync (pScreen); +} + +void +r128DrawDisable (ScreenPtr pScreen) +{ +} + +void +r128DrawFini (ScreenPtr pScreen) +{ +} + +void +r128DrawSync (ScreenPtr pScreen) +{ + KdScreenPriv (pScreen); + r128CardInfo (pScreenPriv); + + mmio = r128c->reg_base; + + r128WaitIdle (); +} diff --git a/hw/kdrive/r128/r128stub.c b/hw/kdrive/r128/r128stub.c new file mode 100644 index 000000000..006d66a6a --- /dev/null +++ b/hw/kdrive/r128/r128stub.c @@ -0,0 +1,59 @@ +/* + * $Id$ + * + * Copyright © 2003 Anders Carlsson + * + * 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 Anders Carlsson not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Anders Carlsson makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL ANDERS CARLSSON 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. + */ +/* $Header$ */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include "r128.h" + +void +InitCard (char *name) +{ + KdCardAttr attr; + + if (LinuxFindPci (0x1002, 0x4c46, 0, &attr)) + KdCardInfoAdd (&r128Funcs, &attr, 0); +} + +void +InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv) +{ + KdInitOutput (pScreenInfo, argc, argv); +} + +void +InitInput (int argc, char **argv) +{ + KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs); +} + +int +ddxProcessArgument (int argc, char **argv, int i) +{ + int ret; + + if (!(ret = vesaProcessArgument (argc, argv, i))) + ret = KdProcessArgument(argc, argv, i); + return ret; +} |