pm2_common.c revision 9d1c4d35
1/* 2 * Copyright 1997-2001 by Alan Hourihane, Wigan, England. 3 * 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 Alan Hourihane not be used in 9 * advertising or publicity pertaining to distribution of the software without 10 * specific, written prior permission. Alan Hourihane makes no representations 11 * about the suitability of this software for any purpose. It is provided 12 * "as is" without express or implied warranty. 13 * 14 * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16 * EVENT SHALL ALAN HOURIHANE 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. 21 * 22 * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk> 23 * Dirk Hohndel, <hohndel@suse.de> 24 * Stefan Dirsch, <sndirsch@suse.de> 25 * Mark Vojkovich, <mvojkovi@ucsd.edu> 26 * Michel Dänzer, <michdaen@iiic.ethz.ch> 27 * 28 * this work is sponsored by S.u.S.E. GmbH, Fuerth, Elsa GmbH, Aachen and 29 * Siemens Nixdorf Informationssysteme 30 * 31 * Permedia 2 accelerated options. 32 */ 33 34#ifdef HAVE_CONFIG_H 35#include "config.h" 36#endif 37 38#include <X11/Xarch.h> 39#include "xf86.h" 40#include "xf86_OSproc.h" 41 42#include "xf86Pci.h" 43 44#include "glint_regs.h" 45#include "glint.h" 46 47#if DEBUG 48# define TRACE_ENTER(str) ErrorF("pm2_common: " str " %d\n",pScrn->scrnIndex) 49# define TRACE_EXIT(str) ErrorF("pm2_common: " str " done\n") 50# define TRACE(str) ErrorF("pm2_common trace: " str "\n") 51#else 52# define TRACE_ENTER(str) 53# define TRACE_EXIT(str) 54# define TRACE(str) 55#endif 56 57void 58Permedia2InitializeEngine(ScrnInfoPtr pScrn) 59{ 60 GLINTPtr pGlint = GLINTPTR(pScrn); 61 62 /* Initialize the Accelerator Engine to defaults */ 63 64 TRACE_ENTER("Permedia2InitializeEngine"); 65 66 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, ScissorMode); 67 GLINT_SLOW_WRITE_REG(UNIT_ENABLE, FBWriteMode); 68 GLINT_SLOW_WRITE_REG(0, dXSub); 69 GLINT_SLOW_WRITE_REG(GWIN_DisableLBUpdate, GLINTWindow); 70 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, DitherMode); 71 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AlphaBlendMode); 72 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, ColorDDAMode); 73 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, TextureColorMode); 74 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, TextureAddressMode); 75 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, PMTextureReadMode); 76 GLINT_SLOW_WRITE_REG(pGlint->pprod, LBReadMode); 77 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AlphaBlendMode); 78 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, TexelLUTMode); 79 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, YUVMode); 80 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, DepthMode); 81 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, RouterMode); 82 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FogMode); 83 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AntialiasMode); 84 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AlphaTestMode); 85 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, StencilMode); 86 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AreaStippleMode); 87 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, LogicalOpMode); 88 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, DepthMode); 89 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, StatisticMode); 90 GLINT_SLOW_WRITE_REG(0x400, FilterMode); 91 GLINT_SLOW_WRITE_REG(0xffffffff, FBHardwareWriteMask); 92 GLINT_SLOW_WRITE_REG(0xffffffff, FBSoftwareWriteMask); 93 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, RasterizerMode); 94 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, GLINTDepth); 95 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FBSourceOffset); 96 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FBPixelOffset); 97 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, LBSourceOffset); 98 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, WindowOrigin); 99 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FBWindowBase); 100 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FBSourceBase); 101 GLINT_SLOW_WRITE_REG(UNIT_DISABLE, LBWindowBase); 102 103#if X_BYTE_ORDER == X_BIG_ENDIAN 104 pGlint->RasterizerSwap = 1; 105#else 106 pGlint->RasterizerSwap = 0; 107#endif 108 109 switch (pScrn->bitsPerPixel) { 110 case 8: 111 pGlint->PixelWidth = 0x0; /* 8 Bits */ 112 pGlint->TexMapFormat = pGlint->pprod; 113#if X_BYTE_ORDER == X_BIG_ENDIAN 114 pGlint->RasterizerSwap |= 3<<15; /* Swap host data */ 115#endif 116 break; 117 case 16: 118 pGlint->PixelWidth = 0x1; /* 16 Bits */ 119 pGlint->TexMapFormat = pGlint->pprod | 1<<19; 120#if X_BYTE_ORDER == X_BIG_ENDIAN 121 pGlint->RasterizerSwap |= 2<<15; /* Swap host data */ 122#endif 123 break; 124 case 24: 125 pGlint->PixelWidth = 0x4; /* 24 Bits */ 126 pGlint->TexMapFormat = pGlint->pprod | 2<<19; 127 break; 128 case 32: 129 pGlint->PixelWidth = 0x2; /* 32 Bits */ 130 pGlint->TexMapFormat = pGlint->pprod | 2<<19; 131 break; 132 } 133 pGlint->ClippingOn = FALSE; 134 pGlint->startxdom = 0; 135 pGlint->startxsub = 0; 136 pGlint->starty = 0; 137 pGlint->count = 0; 138 pGlint->dy = 1<<16; 139 pGlint->dxdom = 0; 140 pGlint->x = 0; 141 pGlint->y = 0; 142 pGlint->h = 0; 143 pGlint->w = 0; 144 pGlint->ROP = 0xFF; 145 GLINT_SLOW_WRITE_REG(pGlint->PixelWidth, FBReadPixel); 146 GLINT_SLOW_WRITE_REG(pGlint->TexMapFormat, PMTextureMapFormat); 147 GLINT_SLOW_WRITE_REG(0, RectangleSize); 148 GLINT_SLOW_WRITE_REG(0, RectangleOrigin); 149 GLINT_SLOW_WRITE_REG(0, dXDom); 150 GLINT_SLOW_WRITE_REG(1<<16, dY); 151 GLINT_SLOW_WRITE_REG(0, StartXDom); 152 GLINT_SLOW_WRITE_REG(0, StartXSub); 153 GLINT_SLOW_WRITE_REG(0, StartY); 154 GLINT_SLOW_WRITE_REG(0, GLINTCount); 155 156 TRACE_EXIT("Permedia2InitializeEngine"); 157} 158 159void 160Permedia2Sync(ScrnInfoPtr pScrn) 161{ 162 GLINTPtr pGlint = GLINTPTR(pScrn); 163 164 CHECKCLIPPING; 165 166 while (GLINT_READ_REG(DMACount) != 0); 167 GLINT_WAIT(2); 168 GLINT_WRITE_REG(0x400, FilterMode); 169 GLINT_WRITE_REG(0, GlintSync); 170 do { 171 while(GLINT_READ_REG(OutFIFOWords) == 0); 172 } while (GLINT_READ_REG(OutputFIFO) != Sync_tag); 173} 174 175