/src/xgi_accel.h
C Header | 1022 lines | 734 code | 78 blank | 210 comment | 213 complexity | 7805b9ad6c73227d6bfcdadc3e56fdd5 MD5 | raw file
Possible License(s): MIT
- /*
- * 2D acceleration for 5597/5598 and 6326
- * Definitions for the XGI engine communication
- *
- * Copyright (C) 1998, 1999 by Alan Hourihane, Wigan, England.
- * Parts Copyright (C) 2001-2004 Thomas Winischhofer, Vienna, Austria.
- *
- * Licensed under the following terms:
- *
- * 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 appears in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * and that the name of the copyright holder not be used in advertising
- * or publicity pertaining to distribution of the software without specific,
- * written prior permission. The copyright holder makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without expressed or implied warranty.
- *
- * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
- * EVENT SHALL THE COPYRIGHT HOLDER 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.
- *
- * Authors: Alan Hourihane <alanh@fairlite.demon.co.uk>,
- * Mike Chapman <mike@paranoia.com>,
- * Juanjo Santamarta <santamarta@ctv.es>,
- * Mitani Hiroshi <hmitani@drl.mei.co.jp>,
- * David Thomas <davtom@dream.org.uk>,
- * Thomas Winischhofer <thomas@winischhofer.net>.
- */
- #ifndef _XGI_315_ACCEL_H_
- #define _XGI_315_ACCEL_H_
- #include "xgi.h"
- /* Definitions for the XGI engine communication. */
- #define PATREGSIZE 256
- #define XGIG2_SCR2SCRCOPY
- #define XGIG2_SOLIDFILL
- #define XGIG2_8X8MONOPATFILL
- /*
- #define XGIG2_COLOREXPSCANLN
- #define XGIG2_SOLIDLINE
- #define XGIG2_DASHEDLINE
- #define XGIG2_S2SCOLOREXPANFILL
- #define XGIG2_8X8COLORPATFILL
- #define XGIG2_C2SCOLOREXPANFILL
- #define XGIG2_IMAGEWRITE
- #define XGIG2_COLOREXPSCANLN
- #define XGIG2_IMAGEWRITE
- */
- #undef BR
- #define BR(x) (0x8200 | (x) << 2)
- /* Definitions for the engine command */
- #define BITBLT 0x00000000
- #define COLOREXP 0x00000001
- #define ENCOLOREXP 0x00000002
- #define MULTIPLE_SCANLINE 0x00000003
- #define LINE 0x00000004
- #define TRAPAZOID_FILL 0x00000005
- #define TRANSPARENT_BITBLT 0x00000006
- #define SRCVIDEO 0x00000000
- #define SRCSYSTEM 0x00000010
- #define SRCAGP 0x00000020
- #define PATFG 0x00000000
- #define PATPATREG 0x00000040
- #define PATMONO 0x00000080
- #define X_INC 0x00010000
- #define X_DEC 0x00000000
- #define Y_INC 0x00020000
- #define Y_DEC 0x00000000
- #define NOCLIP 0x00000000
- #define NOMERGECLIP 0x04000000
- #define CLIPENABLE 0x00040000
- #define CLIPWITHOUTMERGE 0x04040000
- #define OPAQUE 0x00000000
- #define TRANSPARENT 0x00100000
- #define DSTAGP 0x02000000
- #define DSTVIDEO 0x02000000
- /* Line */
- #define LINE_STYLE 0x00800000
- #define NO_RESET_COUNTER 0x00400000
- #define NO_LAST_PIXEL 0x00200000
- /* Macros to do useful things with the XGI BitBLT engine */
- /*
- bit 31 2D engine: 1 is idle,
- bit 30 3D engine: 1 is idle,
- bit 29 Command queue: 1 is empty
- */
- #define GR_SKPC_HEADER 0x16800000L
- #define GR_NIL_CMD 0x168F0000L
- #define Dst_Hight 0xFFF
- #define BandSize 0x10
- /* Jong 09/27/2007; recover for compiler error */
- /* typedef unsigned long ulong ; */
- unsigned long r_port, w_port ;
- int G2CmdQueLen;
- int Alignment ;
- /* int GBCount = 0 ; */
- extern void Volari_SetDefaultIdleWait(XGIPtr pXGI, unsigned HDisplay,
- unsigned depth);
- extern void Volari_Idle(XGIPtr pXGI);
- #define Volari_GetSwWP() (unsigned long)(*(pXGI->pCQ_shareWritePort))
- #define Volari_GetHwRP() (unsigned long)(MMIO_IN32(pXGI->IOBase, 0x85c8))
- void XGIDumpCMDQueue(ScrnInfoPtr pScrn);
- #define Volari_SyncWP\
- {\
- unsigned long p ;\
- \
- p = *(pXGI->pCQ_shareWritePort);\
- PACCELDEBUG(ErrorF("Volari_SyncWP(%08lx)\n",(p)));\
- MMIO_OUT32(pXGI->IOBase, 0x85c4,(p)) ;\
- }
- #define Volari_UpdateHwWP(p)\
- {\
- PACCELDEBUG(ErrorF("Volari_UpdateHwWP(%08lx)\n",(p)));\
- *(pXGI->pCQ_shareWritePort) = (p) ;\
- MMIO_OUT32(pXGI->IOBase, 0x85c4, (p)) ;\
- }
- #define Volari_UpdateSwWP(p)\
- {\
- PACCELDEBUG(ErrorF("Volari_UpdateSwWP(%08lx)\n",(p)));\
- *(pXGI->pCQ_shareWritePort) = (p) ;\
- }
- #define Volari_ResetCmd \
- pXGI->CommandReg = 0 ;
- #define Volari_SetupROP(rop) \
- pXGI->CommandReg |= (rop) << 8;
- #define Volari_SetupCMDFlag(flags) \
- pXGI->CommandReg |= (flags);
- #if 1
- #define GuardBand(CS)\
- {\
- unsigned long lTemp ;\
- int waitCount = 0, maxCount = 1000 ;\
- w_port = Volari_GetSwWP() ;\
- lTemp = (r_port - w_port - BandSize) & pXGI->cmdQueueSizeMask ;\
- if( lTemp < (CS) )\
- {\
- Volari_SyncWP;\
- w_port = Volari_GetSwWP() ;\
- do{\
- waitCount++ ;\
- r_port = Volari_GetHwRP(); \
- lTemp = (r_port - w_port - BandSize)&pXGI->cmdQueueSizeMask ;\
- if( lTemp >= (CS) ) break ;\
- if( waitCount > maxCount ){\
- waitCount = 0 ;\
- maxCount /= 10 ; maxCount *= 2;\
- usleep(1) ;\
- }\
- }while(lTemp < (CS)) ;\
- }\
- }
- #else
- #define GuardBand(CS)\
- {\
- unsigned long lTemp ; \
- \
- w_port = Volari_GetSwWP(); \
- lTemp = r_port - w_port + pXGI->cmdQueueSize ; \
- \
- if( ((lTemp & pXGI->cmdQueueSizeMask ) < (BandSize + CS)) && ( r_port != w_port ) ) \
- { \
- while ( 1 ) \
- { \
- r_port = Volari_GetHwRP(); \
- if(r_port == w_port) \
- break; \
- lTemp = r_port - w_port + pXGI->cmdQueueSize ; \
- if( (lTemp & pXGI->cmdQueueSizeMask ) >= (BandSize + CS) ) \
- break; \
- usleep(1);/*usleep(100);*//* Jong Lin 08-29-2005 */\
- } \
- } \
- }
- #endif
- /*
- #define GuardBand(CS)\
- {\
- long lTemp ; \
- w_port = Volari_GetSwWP(); \
- while ( 1 ) \
- { \
- r_port = Volari_GetHwRP(); \
- if(r_port == w_port)\
- break; \
- lTemp = r_port - w_port + pXGI->cmdQueueSize ; \
- if( (lTemp & pXGI->cmdQueueSizeMask ) >= (BandSize + CS) ) \
- break; \
- }\
- }
- */
- #define Volari_DoCMD\
- {\
- unsigned long ulTemp ;\
- \
- PACCELDEBUG(ErrorF("pXGI->CommandReg = %08lX\n", pXGI->CommandReg));\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x823C) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(pXGI->CommandReg) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateHwWP(ulTemp) ;\
- \
- }
- /**********************************************************************
- #define Volari_SetupSRCBase(base) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(0), base);\
- G2CmdQueLen --;
- **********************************************************************/
- #define Volari_SetupSRCBase(base) \
- {\
- unsigned long ulTemp ;\
- \
- if(base != g_srcbase) \
- { \
- g_srcbase = base; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8200) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(base) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- /***********************************************************************
- #define Volari_SetupSRCPitch(pitch) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT16(pXGI->IOBase, BR(1), pitch);\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupSRCPitch(pitch) \
- {\
- unsigned long ulTemp ;\
- if(pitch != g_SrcPitch) \
- { \
- g_SrcPitch = pitch; \
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8204) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(pitch) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- \
- }
- /***********************************************************************
- #define Volari_SetupSRCXY(x,y) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(2), (x)<<16 | (y) );\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupSRCXY(x,y) \
- {\
- unsigned long ulTemp ;\
- \
- if((x != g_src_x) || (y != g_src_y)) \
- { \
- g_src_x = x; \
- g_src_y = y; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8208) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32((x<<16)+(y&0xFFFF)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- /***********************************************************************
- #define Volari_SetupDSTBase(base) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(4), base);\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupDSTBase(base) \
- {\
- unsigned long ulTemp ;\
- \
- if(base != g_dstbase) \
- { \
- g_dstbase=base; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8210) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(base) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- /***********************************************************************
- #define Volari_SetupDSTXY(x,y) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(3), (x)<<16 | (y) );\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupDSTXY(x,y) \
- {\
- unsigned long ulTemp ;\
- \
- if((x != g_dst_x) || (y != g_dst_y)) \
- { \
- g_dst_x = x; \
- g_dst_y = y; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x820C) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((x)<<16)+((y)&0xFFFF)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- /***********************************************************************
- #define Volari_SetupDSTRect(x,y) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(5), (y)<<16 | (x) );\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupDSTRect(x,y) \
- {\
- unsigned long ulTemp ;\
- \
- if( (x != g_DstRectX) || (y != g_DstRectY)) \
- { \
- g_DstRectX = x; \
- g_DstRectY = y; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8214) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((y)<<16)|((x)&0xFFFF)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- Volari_UpdateHwWP(ulTemp) ;\
- } \
- \
- }
- /***********************************************************************
- #define Volari_SetupDSTColorDepth(bpp) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT16(pXGI->IOBase, BR(1)+2, bpp);\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupDSTColorDepth(bpp) \
- pXGI->CommandReg |= ((ulong)(bpp))&(GENMASK(17:16)) ;
- /***********************************************************************
- #define Volari_SetupRect(w,h) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(6), (h)<<16 | (w) );\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupRect(w,h) \
- {\
- unsigned long ulTemp ;\
- \
- if( (w != g_width) || (h != g_height)) \
- { \
- g_width = w; \
- g_height = h; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8218) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((h)<<16)|((w)&0xffff)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- /***********************************************************************
- #define Volari_SetupPATFG(color) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(7), color);\
- G2CmdQueLen --;
- ***********************************************************************/
- /***********************************************************************
- #define Volari_SetupPATBG(color) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(8), color);\
- G2CmdQueLen --;
- ***********************************************************************/
- /***********************************************************************
- #define Volari_SetupSRCFG(color) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(9), color);\
- G2CmdQueLen --;
- ***********************************************************************/
- /***********************************************************************
- #define Volari_SetupSRCBG(color) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(10), color);\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupPATFG(color) \
- {\
- unsigned long ulTemp ;\
- \
- if( color != g_MonoPatFgColor) \
- { \
- g_MonoPatFgColor = color; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(7)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(color) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- Volari_UpdateHwWP(ulTemp) ;\
- } \
- \
- }
- #define Volari_SetupPATBG(color) \
- {\
- unsigned long ulTemp ;\
- \
- if( color != g_MonoPatBgColor) \
- { \
- g_MonoPatBgColor = color; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(8)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(color) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- \
- }
- #define Volari_SetupSRCFG(color) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(9)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(color) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- \
- }
- #define Volari_SetupSRCBG(color) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(10)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(color) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- \
- }
- /***********************************************************************
- #define Volari_SetupMONOPAT(p0,p1) \
- if (G2CmdQueLen <= 1) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(11), p0);\
- MMIO_OUT32(pXGI->IOBase, BR(12), p1);\
- G2CmdQueLen =G2CmdQueLen-2;
- ***********************************************************************/
- #define Volari_SetupMONOPAT0(p0) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x822C) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(p0) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- \
- }
- #define Volari_SetupMONOPAT1(p1) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8230) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(p1) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- \
- }
- /***********************************************************************
- #define Volari_SetupClipLT(left,top) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(13), ((left) & 0xFFFF) | (top)<<16 );\
- G2CmdQueLen--;
- ***********************************************************************/
- /***********************************************************************
- #define Volari_SetupClipRB(right,bottom) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(14), ((right) & 0xFFFF) | (bottom)<<16 );\
- G2CmdQueLen --;
- ***********************************************************************/
- #define Volari_SetupClip(left,top,right,bottom) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(13)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((top)<<16)|((left)&0xffff)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- \
- }
- #define Volari_SetupClipLT(left,top) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(13)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((top)<<16)|((left)&0xffff)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- \
- }
- #define Volari_SetupClipRB(right,bottom) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(14)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((right) & 0xFFFF) | ((bottom)<<16))) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- \
- }
- /***********************************************************************
- #define Volari_SetupROP(rop) \
- pXGI->CommandReg = (rop) << 8;
- #define Volari_SetupCMDFlag(flags) \
- pXGI->CommandReg |= (flags);
- #define Volari_DoCMD \
- if (G2CmdQueLen <= 1) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(15), pXGI->CommandReg); \
- MMIO_OUT32(pXGI->IOBase, BR(16), 0);\
- G2CmdQueLen =G2CmdQueLen-2;
- ***********************************************************************/
- /***********************************************************************
- #define Volari_SetupX0Y0(x,y) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(2), (y)<<16 | (x) );\
- G2CmdQueLen --;
- #define Volari_SetupX1Y1(x,y) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(3), (y)<<16 | (x) );\
- G2CmdQueLen --;
- #define Volari_SetupLineCount(c) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT16(pXGI->IOBase, BR(6), c);\
- G2CmdQueLen --;
- #define Volari_SetupStylePeriod(p) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT16(pXGI->IOBase, BR(6)+2, p);\
- G2CmdQueLen --;
- #define Volari_SetupStyleLow(ls) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(11), ls);\
- G2CmdQueLen --;
- #define Volari_SetupStyleHigh(ls) \
- if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\
- MMIO_OUT32(pXGI->IOBase, BR(12), ls);\
- G2CmdQueLen --;
- ***********************************************************************/
- /***********************************************************************
- * For Line Drawing
- ***********************************************************************/
- #define Volari_SetupX0Y0(x,y) \
- {\
- unsigned long ulTemp ;\
- \
- if((x != g_src_y) || (y != g_src_x)) \
- { \
- g_src_x = y; \
- g_src_y = x; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(2)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((y)<<16) | ((x)&0xFFFF) ) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- #define Volari_SetupX1Y1(x,y) \
- {\
- unsigned long ulTemp ;\
- \
- if((x != g_dst_y) || (y != g_dst_x)) \
- { \
- g_dst_x = y; \
- g_dst_y = x; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(3)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((y)<<16) | ((x)&0xFFFF) ) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- #define Volari_SetupLineCount(c) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- if(c != g_width) \
- { \
- g_width = c; \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(6) + 0x30000 ) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((c)&0xffff)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- #define Volari_SetupStylePeriod(p) \
- {\
- unsigned long ulTemp ;\
- \
- if(p != g_height) \
- { \
- g_height = c; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(6) + 0xC0000 ) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((p)<<16)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- #define Volari_SetupStylePeriodCount(p,c) \
- {\
- unsigned long ulTemp ;\
- \
- if((c != g_width) || (p != g_height)) \
- { \
- g_width = c; \
- g_height = p; \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(6)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(((p)<<16)|((c)&0xffff)) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- } \
- }
- #define Volari_SetupStyle(ls,hs) \
- {\
- unsigned long ulTemp ;\
- \
- ulTemp = Volari_GetSwWP() ;\
- \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \
- (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(11)) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\
- (CARD32)BE_SWAP32(ls) ;\
- if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \
- { \
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \
- (CARD32)BE_SWAP32(GR_NIL_CMD) ;\
- ulTemp += 0x10 ;\
- } \
- else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \
- ulTemp += 0x08 ;\
- ulTemp &= pXGI->cmdQueueSizeMask ;\
- Volari_UpdateSwWP(ulTemp) ;\
- \
- }
- #endif /* _XGI_315_ACCEL_H_ */