1/* 2 * 2D acceleration for 5597/5598 and 6326 3 * Definitions for the XGI engine communication 4 * 5 * Copyright (C) 1998, 1999 by Alan Hourihane, Wigan, England. 6 * Parts Copyright (C) 2001-2004 Thomas Winischhofer, Vienna, Austria. 7 * 8 * Licensed under the following terms: 9 * 10 * Permission to use, copy, modify, distribute, and sell this software and its 11 * documentation for any purpose is hereby granted without fee, provided that 12 * the above copyright notice appears in all copies and that both that copyright 13 * notice and this permission notice appear in supporting documentation, and 14 * and that the name of the copyright holder not be used in advertising 15 * or publicity pertaining to distribution of the software without specific, 16 * written prior permission. The copyright holder makes no representations 17 * about the suitability of this software for any purpose. It is provided 18 * "as is" without expressed or implied warranty. 19 * 20 * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 21 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO 22 * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR 23 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 24 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 25 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 26 * PERFORMANCE OF THIS SOFTWARE. 27 * 28 * Authors: Alan Hourihane <alanh@fairlite.demon.co.uk>, 29 * Mike Chapman <mike@paranoia.com>, 30 * Juanjo Santamarta <santamarta@ctv.es>, 31 * Mitani Hiroshi <hmitani@drl.mei.co.jp>, 32 * David Thomas <davtom@dream.org.uk>, 33 * Thomas Winischhofer <thomas@winischhofer.net>. 34 */ 35 36#ifndef _XGI_315_ACCEL_H_ 37#define _XGI_315_ACCEL_H_ 38 39#include "xgi.h" 40 41/* Definitions for the XGI engine communication. */ 42 43#define PATREGSIZE 256 44 45#define XGIG2_SCR2SCRCOPY 46#define XGIG2_SOLIDFILL 47#define XGIG2_8X8MONOPATFILL 48 49 50/* 51#define XGIG2_COLOREXPSCANLN 52#define XGIG2_SOLIDLINE 53#define XGIG2_DASHEDLINE 54#define XGIG2_S2SCOLOREXPANFILL 55#define XGIG2_8X8COLORPATFILL 56#define XGIG2_C2SCOLOREXPANFILL 57#define XGIG2_IMAGEWRITE 58#define XGIG2_COLOREXPSCANLN 59#define XGIG2_IMAGEWRITE 60*/ 61 62#undef BR 63#define BR(x) (0x8200 | (x) << 2) 64 65/* Definitions for the engine command */ 66#define BITBLT 0x00000000 67#define COLOREXP 0x00000001 68#define ENCOLOREXP 0x00000002 69#define MULTIPLE_SCANLINE 0x00000003 70#define LINE 0x00000004 71#define TRAPAZOID_FILL 0x00000005 72#define TRANSPARENT_BITBLT 0x00000006 73 74#define SRCVIDEO 0x00000000 75#define SRCSYSTEM 0x00000010 76#define SRCAGP 0x00000020 77 78#define PATFG 0x00000000 79#define PATPATREG 0x00000040 80#define PATMONO 0x00000080 81 82#define X_INC 0x00010000 83#define X_DEC 0x00000000 84#define Y_INC 0x00020000 85#define Y_DEC 0x00000000 86 87#define NOCLIP 0x00000000 88#define NOMERGECLIP 0x04000000 89#define CLIPENABLE 0x00040000 90#define CLIPWITHOUTMERGE 0x04040000 91 92#define OPAQUE 0x00000000 93#define TRANSPARENT 0x00100000 94 95#define DSTAGP 0x02000000 96#define DSTVIDEO 0x02000000 97 98/* Line */ 99#define LINE_STYLE 0x00800000 100#define NO_RESET_COUNTER 0x00400000 101#define NO_LAST_PIXEL 0x00200000 102 103/* Macros to do useful things with the XGI BitBLT engine */ 104 105 106/* 107 bit 31 2D engine: 1 is idle, 108 bit 30 3D engine: 1 is idle, 109 bit 29 Command queue: 1 is empty 110*/ 111 112#define GR_SKPC_HEADER 0x16800000L 113#define GR_NIL_CMD 0x168F0000L 114 115#define Dst_Hight 0xFFF 116 117#define BandSize 0x10 118 119/* Jong 09/27/2007; recover for compiler error */ 120/* typedef unsigned long ulong ; */ 121 122unsigned long r_port, w_port ; 123 124int G2CmdQueLen; 125int Alignment ; 126/* int GBCount = 0 ; */ 127 128extern void Volari_SetDefaultIdleWait(XGIPtr pXGI, unsigned HDisplay, 129 unsigned depth); 130extern void Volari_Idle(XGIPtr pXGI); 131 132#define Volari_GetSwWP() (unsigned long)(*(pXGI->pCQ_shareWritePort)) 133#define Volari_GetHwRP() (unsigned long)(MMIO_IN32(pXGI->IOBase, 0x85c8)) 134 135void XGIDumpCMDQueue(ScrnInfoPtr pScrn); 136 137#define Volari_SyncWP\ 138 {\ 139 unsigned long p ;\ 140 \ 141 p = *(pXGI->pCQ_shareWritePort);\ 142 PACCELDEBUG(ErrorF("Volari_SyncWP(%08lx)\n",(p)));\ 143 MMIO_OUT32(pXGI->IOBase, 0x85c4,(p)) ;\ 144 } 145 146#define Volari_UpdateHwWP(p)\ 147 {\ 148 PACCELDEBUG(ErrorF("Volari_UpdateHwWP(%08lx)\n",(p)));\ 149 *(pXGI->pCQ_shareWritePort) = (p) ;\ 150 MMIO_OUT32(pXGI->IOBase, 0x85c4, (p)) ;\ 151 } 152 153#define Volari_UpdateSwWP(p)\ 154 {\ 155 PACCELDEBUG(ErrorF("Volari_UpdateSwWP(%08lx)\n",(p)));\ 156 *(pXGI->pCQ_shareWritePort) = (p) ;\ 157 } 158 159 160#define Volari_ResetCmd \ 161 pXGI->CommandReg = 0 ; 162 163#define Volari_SetupROP(rop) \ 164 pXGI->CommandReg |= (rop) << 8; 165 166#define Volari_SetupCMDFlag(flags) \ 167 pXGI->CommandReg |= (flags); 168 169#if 1 170#define GuardBand(CS)\ 171{\ 172 unsigned long lTemp ;\ 173 int waitCount = 0, maxCount = 1000 ;\ 174 w_port = Volari_GetSwWP() ;\ 175 lTemp = (r_port - w_port - BandSize) & pXGI->cmdQueueSizeMask ;\ 176 if( lTemp < (CS) )\ 177 {\ 178 Volari_SyncWP;\ 179 w_port = Volari_GetSwWP() ;\ 180 do{\ 181 waitCount++ ;\ 182 r_port = Volari_GetHwRP(); \ 183 lTemp = (r_port - w_port - BandSize)&pXGI->cmdQueueSizeMask ;\ 184 if( lTemp >= (CS) ) break ;\ 185 if( waitCount > maxCount ){\ 186 waitCount = 0 ;\ 187 maxCount /= 10 ; maxCount *= 2;\ 188 usleep(1) ;\ 189 }\ 190 }while(lTemp < (CS)) ;\ 191 }\ 192} 193#else 194#define GuardBand(CS)\ 195 {\ 196 unsigned long lTemp ; \ 197 \ 198 w_port = Volari_GetSwWP(); \ 199 lTemp = r_port - w_port + pXGI->cmdQueueSize ; \ 200 \ 201 if( ((lTemp & pXGI->cmdQueueSizeMask ) < (BandSize + CS)) && ( r_port != w_port ) ) \ 202 { \ 203 while ( 1 ) \ 204 { \ 205 r_port = Volari_GetHwRP(); \ 206 if(r_port == w_port) \ 207 break; \ 208 lTemp = r_port - w_port + pXGI->cmdQueueSize ; \ 209 if( (lTemp & pXGI->cmdQueueSizeMask ) >= (BandSize + CS) ) \ 210 break; \ 211 usleep(1);/*usleep(100);*//* Jong Lin 08-29-2005 */\ 212 } \ 213 } \ 214 } 215#endif 216 217/* 218#define GuardBand(CS)\ 219 {\ 220 long lTemp ; \ 221 w_port = Volari_GetSwWP(); \ 222 while ( 1 ) \ 223 { \ 224 r_port = Volari_GetHwRP(); \ 225 if(r_port == w_port)\ 226 break; \ 227 lTemp = r_port - w_port + pXGI->cmdQueueSize ; \ 228 if( (lTemp & pXGI->cmdQueueSizeMask ) >= (BandSize + CS) ) \ 229 break; \ 230 }\ 231 } 232*/ 233 234#define Volari_DoCMD\ 235 {\ 236 unsigned long ulTemp ;\ 237 \ 238 PACCELDEBUG(ErrorF("pXGI->CommandReg = %08lX\n", pXGI->CommandReg));\ 239 \ 240 ulTemp = Volari_GetSwWP() ;\ 241 \ 242 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 243 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x823C) ;\ 244 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 245 (CARD32)BE_SWAP32(pXGI->CommandReg) ;\ 246 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 247 { \ 248 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 249 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 250 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 251 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 252 ulTemp += 0x10 ;\ 253 } \ 254 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 255 ulTemp += 0x08 ;\ 256 ulTemp &= pXGI->cmdQueueSizeMask ;\ 257 Volari_UpdateHwWP(ulTemp) ;\ 258 \ 259 } 260 261/********************************************************************** 262#define Volari_SetupSRCBase(base) \ 263 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 264 MMIO_OUT32(pXGI->IOBase, BR(0), base);\ 265 G2CmdQueLen --; 266 **********************************************************************/ 267 268#define Volari_SetupSRCBase(base) \ 269 {\ 270 unsigned long ulTemp ;\ 271 \ 272 if(base != g_srcbase) \ 273 { \ 274 g_srcbase = base; \ 275 ulTemp = Volari_GetSwWP() ;\ 276 \ 277 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 278 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8200) ;\ 279 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 280 (CARD32)BE_SWAP32(base) ;\ 281 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 282 { \ 283 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 284 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 285 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 286 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 287 ulTemp += 0x10 ;\ 288 } \ 289 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 290 ulTemp += 0x08 ;\ 291 ulTemp &= pXGI->cmdQueueSizeMask ;\ 292 Volari_UpdateSwWP(ulTemp) ;\ 293 } \ 294 } 295 296 297/*********************************************************************** 298#define Volari_SetupSRCPitch(pitch) \ 299 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 300 MMIO_OUT16(pXGI->IOBase, BR(1), pitch);\ 301 G2CmdQueLen --; 302 303***********************************************************************/ 304 305#define Volari_SetupSRCPitch(pitch) \ 306 {\ 307 unsigned long ulTemp ;\ 308 if(pitch != g_SrcPitch) \ 309 { \ 310 g_SrcPitch = pitch; \ 311 \ 312 ulTemp = Volari_GetSwWP() ;\ 313 \ 314 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 315 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8204) ;\ 316 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 317 (CARD32)BE_SWAP32(pitch) ;\ 318 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 319 { \ 320 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 321 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 322 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 323 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 324 ulTemp += 0x10 ;\ 325 } \ 326 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 327 ulTemp += 0x08 ;\ 328 ulTemp &= pXGI->cmdQueueSizeMask ;\ 329 Volari_UpdateSwWP(ulTemp) ;\ 330 } \ 331 \ 332 } 333 334/*********************************************************************** 335#define Volari_SetupSRCXY(x,y) \ 336 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 337 MMIO_OUT32(pXGI->IOBase, BR(2), (x)<<16 | (y) );\ 338 G2CmdQueLen --; 339***********************************************************************/ 340 341#define Volari_SetupSRCXY(x,y) \ 342 {\ 343 unsigned long ulTemp ;\ 344 \ 345 if((x != g_src_x) || (y != g_src_y)) \ 346 { \ 347 g_src_x = x; \ 348 g_src_y = y; \ 349 ulTemp = Volari_GetSwWP() ;\ 350 \ 351 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 352 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8208) ;\ 353 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 354 (CARD32)BE_SWAP32((x<<16)+(y&0xFFFF)) ;\ 355 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 356 { \ 357 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 358 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 359 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 360 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 361 ulTemp += 0x10 ;\ 362 } \ 363 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 364 ulTemp += 0x08 ;\ 365 ulTemp &= pXGI->cmdQueueSizeMask ;\ 366 Volari_UpdateSwWP(ulTemp) ;\ 367 } \ 368 } 369 370/*********************************************************************** 371#define Volari_SetupDSTBase(base) \ 372 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 373 MMIO_OUT32(pXGI->IOBase, BR(4), base);\ 374 G2CmdQueLen --; 375 376***********************************************************************/ 377 378#define Volari_SetupDSTBase(base) \ 379 {\ 380 unsigned long ulTemp ;\ 381 \ 382 if(base != g_dstbase) \ 383 { \ 384 g_dstbase=base; \ 385 ulTemp = Volari_GetSwWP() ;\ 386 \ 387 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 388 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8210) ;\ 389 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 390 (CARD32)BE_SWAP32(base) ;\ 391 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 392 { \ 393 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 394 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 395 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 396 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 397 ulTemp += 0x10 ;\ 398 } \ 399 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 400 ulTemp += 0x08 ;\ 401 ulTemp &= pXGI->cmdQueueSizeMask ;\ 402 Volari_UpdateSwWP(ulTemp) ;\ 403 } \ 404 } 405 406/*********************************************************************** 407#define Volari_SetupDSTXY(x,y) \ 408 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 409 MMIO_OUT32(pXGI->IOBase, BR(3), (x)<<16 | (y) );\ 410 G2CmdQueLen --; 411 412***********************************************************************/ 413 414#define Volari_SetupDSTXY(x,y) \ 415 {\ 416 unsigned long ulTemp ;\ 417 \ 418 if((x != g_dst_x) || (y != g_dst_y)) \ 419 { \ 420 g_dst_x = x; \ 421 g_dst_y = y; \ 422 ulTemp = Volari_GetSwWP() ;\ 423 \ 424 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 425 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x820C) ;\ 426 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 427 (CARD32)BE_SWAP32(((x)<<16)+((y)&0xFFFF)) ;\ 428 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 429 { \ 430 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 431 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 432 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 433 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 434 ulTemp += 0x10 ;\ 435 } \ 436 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 437 ulTemp += 0x08 ;\ 438 ulTemp &= pXGI->cmdQueueSizeMask ;\ 439 Volari_UpdateSwWP(ulTemp) ;\ 440 } \ 441 } 442 443/*********************************************************************** 444#define Volari_SetupDSTRect(x,y) \ 445 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 446 MMIO_OUT32(pXGI->IOBase, BR(5), (y)<<16 | (x) );\ 447 G2CmdQueLen --; 448 449***********************************************************************/ 450 451#define Volari_SetupDSTRect(x,y) \ 452 {\ 453 unsigned long ulTemp ;\ 454 \ 455 if( (x != g_DstRectX) || (y != g_DstRectY)) \ 456 { \ 457 g_DstRectX = x; \ 458 g_DstRectY = y; \ 459 ulTemp = Volari_GetSwWP() ;\ 460 \ 461 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 462 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8214) ;\ 463 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 464 (CARD32)BE_SWAP32(((y)<<16)|((x)&0xFFFF)) ;\ 465 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 466 { \ 467 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 468 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 469 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 470 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 471 ulTemp += 0x10 ;\ 472 } \ 473 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 474 ulTemp += 0x08 ;\ 475 ulTemp &= pXGI->cmdQueueSizeMask ;\ 476 Volari_UpdateSwWP(ulTemp) ;\ 477 Volari_UpdateHwWP(ulTemp) ;\ 478 } \ 479 \ 480 } 481 482/*********************************************************************** 483#define Volari_SetupDSTColorDepth(bpp) \ 484 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 485 MMIO_OUT16(pXGI->IOBase, BR(1)+2, bpp);\ 486 G2CmdQueLen --; 487***********************************************************************/ 488 489#define Volari_SetupDSTColorDepth(bpp) \ 490 pXGI->CommandReg |= ((ulong)(bpp))&(GENMASK(17:16)) ; 491 492/*********************************************************************** 493#define Volari_SetupRect(w,h) \ 494 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 495 MMIO_OUT32(pXGI->IOBase, BR(6), (h)<<16 | (w) );\ 496 G2CmdQueLen --; 497***********************************************************************/ 498 499#define Volari_SetupRect(w,h) \ 500 {\ 501 unsigned long ulTemp ;\ 502 \ 503 if( (w != g_width) || (h != g_height)) \ 504 { \ 505 g_width = w; \ 506 g_height = h; \ 507 ulTemp = Volari_GetSwWP() ;\ 508 \ 509 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 510 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8218) ;\ 511 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 512 (CARD32)BE_SWAP32(((h)<<16)|((w)&0xffff)) ;\ 513 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 514 { \ 515 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 516 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 517 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 518 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 519 ulTemp += 0x10 ;\ 520 } \ 521 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 522 ulTemp += 0x08 ;\ 523 ulTemp &= pXGI->cmdQueueSizeMask ;\ 524 Volari_UpdateSwWP(ulTemp) ;\ 525 } \ 526 } 527 528/*********************************************************************** 529#define Volari_SetupPATFG(color) \ 530 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 531 MMIO_OUT32(pXGI->IOBase, BR(7), color);\ 532 G2CmdQueLen --; 533***********************************************************************/ 534/*********************************************************************** 535#define Volari_SetupPATBG(color) \ 536 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 537 MMIO_OUT32(pXGI->IOBase, BR(8), color);\ 538 G2CmdQueLen --; 539***********************************************************************/ 540/*********************************************************************** 541#define Volari_SetupSRCFG(color) \ 542 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 543 MMIO_OUT32(pXGI->IOBase, BR(9), color);\ 544 G2CmdQueLen --; 545***********************************************************************/ 546/*********************************************************************** 547#define Volari_SetupSRCBG(color) \ 548 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 549 MMIO_OUT32(pXGI->IOBase, BR(10), color);\ 550 G2CmdQueLen --; 551***********************************************************************/ 552 553#define Volari_SetupPATFG(color) \ 554 {\ 555 unsigned long ulTemp ;\ 556 \ 557 if( color != g_MonoPatFgColor) \ 558 { \ 559 g_MonoPatFgColor = color; \ 560 ulTemp = Volari_GetSwWP() ;\ 561 \ 562 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 563 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(7)) ;\ 564 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 565 (CARD32)BE_SWAP32(color) ;\ 566 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 567 { \ 568 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 569 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 570 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 571 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 572 ulTemp += 0x10 ;\ 573 } \ 574 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 575 ulTemp += 0x08 ;\ 576 ulTemp &= pXGI->cmdQueueSizeMask ;\ 577 Volari_UpdateSwWP(ulTemp) ;\ 578 Volari_UpdateHwWP(ulTemp) ;\ 579 } \ 580 \ 581 } 582 583#define Volari_SetupPATBG(color) \ 584 {\ 585 unsigned long ulTemp ;\ 586 \ 587 if( color != g_MonoPatBgColor) \ 588 { \ 589 g_MonoPatBgColor = color; \ 590 ulTemp = Volari_GetSwWP() ;\ 591 \ 592 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 593 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(8)) ;\ 594 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 595 (CARD32)BE_SWAP32(color) ;\ 596 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 597 { \ 598 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 599 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 600 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 601 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 602 ulTemp += 0x10 ;\ 603 } \ 604 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 605 ulTemp += 0x08 ;\ 606 ulTemp &= pXGI->cmdQueueSizeMask ;\ 607 Volari_UpdateSwWP(ulTemp) ;\ 608 } \ 609 \ 610 } 611 612#define Volari_SetupSRCFG(color) \ 613 {\ 614 unsigned long ulTemp ;\ 615 \ 616 ulTemp = Volari_GetSwWP() ;\ 617 \ 618 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 619 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(9)) ;\ 620 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 621 (CARD32)BE_SWAP32(color) ;\ 622 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 623 { \ 624 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 625 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 626 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 627 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 628 ulTemp += 0x10 ;\ 629 } \ 630 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 631 ulTemp += 0x08 ;\ 632 ulTemp &= pXGI->cmdQueueSizeMask ;\ 633 Volari_UpdateSwWP(ulTemp) ;\ 634 \ 635 } 636 637#define Volari_SetupSRCBG(color) \ 638 {\ 639 unsigned long ulTemp ;\ 640 \ 641 ulTemp = Volari_GetSwWP() ;\ 642 \ 643 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 644 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(10)) ;\ 645 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 646 (CARD32)BE_SWAP32(color) ;\ 647 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 648 { \ 649 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 650 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 651 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 652 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 653 ulTemp += 0x10 ;\ 654 } \ 655 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 656 ulTemp += 0x08 ;\ 657 ulTemp &= pXGI->cmdQueueSizeMask ;\ 658 Volari_UpdateSwWP(ulTemp) ;\ 659 \ 660 } 661 662/*********************************************************************** 663#define Volari_SetupMONOPAT(p0,p1) \ 664 if (G2CmdQueLen <= 1) Volari_Idle(pXGI);\ 665 MMIO_OUT32(pXGI->IOBase, BR(11), p0);\ 666 MMIO_OUT32(pXGI->IOBase, BR(12), p1);\ 667 G2CmdQueLen =G2CmdQueLen-2; 668***********************************************************************/ 669 670#define Volari_SetupMONOPAT0(p0) \ 671 {\ 672 unsigned long ulTemp ;\ 673 \ 674 ulTemp = Volari_GetSwWP() ;\ 675 \ 676 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 677 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x822C) ;\ 678 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 679 (CARD32)BE_SWAP32(p0) ;\ 680 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 681 { \ 682 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 683 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 684 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 685 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 686 ulTemp += 0x10 ;\ 687 } \ 688 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 689 ulTemp += 0x08 ;\ 690 ulTemp &= pXGI->cmdQueueSizeMask ;\ 691 Volari_UpdateSwWP(ulTemp) ;\ 692 \ 693 } 694 695#define Volari_SetupMONOPAT1(p1) \ 696 {\ 697 unsigned long ulTemp ;\ 698 \ 699 ulTemp = Volari_GetSwWP() ;\ 700 \ 701 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 702 (CARD32)BE_SWAP32(GR_SKPC_HEADER + 0x8230) ;\ 703 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 704 (CARD32)BE_SWAP32(p1) ;\ 705 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 706 { \ 707 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 708 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 709 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 710 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 711 ulTemp += 0x10 ;\ 712 } \ 713 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 714 ulTemp += 0x08 ;\ 715 ulTemp &= pXGI->cmdQueueSizeMask ;\ 716 Volari_UpdateSwWP(ulTemp) ;\ 717 \ 718 } 719/*********************************************************************** 720#define Volari_SetupClipLT(left,top) \ 721 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 722 MMIO_OUT32(pXGI->IOBase, BR(13), ((left) & 0xFFFF) | (top)<<16 );\ 723 G2CmdQueLen--; 724***********************************************************************/ 725/*********************************************************************** 726#define Volari_SetupClipRB(right,bottom) \ 727 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 728 MMIO_OUT32(pXGI->IOBase, BR(14), ((right) & 0xFFFF) | (bottom)<<16 );\ 729 G2CmdQueLen --; 730***********************************************************************/ 731 732#define Volari_SetupClip(left,top,right,bottom) \ 733 {\ 734 unsigned long ulTemp ;\ 735 \ 736 ulTemp = Volari_GetSwWP() ;\ 737 \ 738 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 739 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(13)) ;\ 740 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 741 (CARD32)BE_SWAP32(((top)<<16)|((left)&0xffff)) ;\ 742 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 743 { \ 744 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 745 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 746 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 747 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 748 ulTemp += 0x10 ;\ 749 } \ 750 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 751 ulTemp += 0x08 ;\ 752 ulTemp &= pXGI->cmdQueueSizeMask ;\ 753 Volari_UpdateSwWP(ulTemp) ;\ 754 \ 755 } 756 757#define Volari_SetupClipLT(left,top) \ 758 {\ 759 unsigned long ulTemp ;\ 760 \ 761 ulTemp = Volari_GetSwWP() ;\ 762 \ 763 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 764 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(13)) ;\ 765 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 766 (CARD32)BE_SWAP32(((top)<<16)|((left)&0xffff)) ;\ 767 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 768 { \ 769 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 770 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 771 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 772 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 773 ulTemp += 0x10 ;\ 774 } \ 775 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 776 ulTemp += 0x08 ;\ 777 ulTemp &= pXGI->cmdQueueSizeMask ;\ 778 Volari_UpdateSwWP(ulTemp) ;\ 779 \ 780 } 781 782#define Volari_SetupClipRB(right,bottom) \ 783 {\ 784 unsigned long ulTemp ;\ 785 \ 786 ulTemp = Volari_GetSwWP() ;\ 787 \ 788 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 789 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(14)) ;\ 790 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 791 (CARD32)BE_SWAP32(((right) & 0xFFFF) | ((bottom)<<16))) ;\ 792 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 793 { \ 794 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 795 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 796 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 797 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 798 ulTemp += 0x10 ;\ 799 } \ 800 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 801 ulTemp += 0x08 ;\ 802 ulTemp &= pXGI->cmdQueueSizeMask ;\ 803 Volari_UpdateSwWP(ulTemp) ;\ 804 \ 805 } 806 807/*********************************************************************** 808#define Volari_SetupROP(rop) \ 809 pXGI->CommandReg = (rop) << 8; 810 811#define Volari_SetupCMDFlag(flags) \ 812 pXGI->CommandReg |= (flags); 813 814#define Volari_DoCMD \ 815 if (G2CmdQueLen <= 1) Volari_Idle(pXGI);\ 816 MMIO_OUT32(pXGI->IOBase, BR(15), pXGI->CommandReg); \ 817 MMIO_OUT32(pXGI->IOBase, BR(16), 0);\ 818 G2CmdQueLen =G2CmdQueLen-2; 819***********************************************************************/ 820 821/*********************************************************************** 822#define Volari_SetupX0Y0(x,y) \ 823 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 824 MMIO_OUT32(pXGI->IOBase, BR(2), (y)<<16 | (x) );\ 825 G2CmdQueLen --; 826#define Volari_SetupX1Y1(x,y) \ 827 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 828 MMIO_OUT32(pXGI->IOBase, BR(3), (y)<<16 | (x) );\ 829 G2CmdQueLen --; 830#define Volari_SetupLineCount(c) \ 831 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 832 MMIO_OUT16(pXGI->IOBase, BR(6), c);\ 833 G2CmdQueLen --; 834#define Volari_SetupStylePeriod(p) \ 835 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 836 MMIO_OUT16(pXGI->IOBase, BR(6)+2, p);\ 837 G2CmdQueLen --; 838#define Volari_SetupStyleLow(ls) \ 839 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 840 MMIO_OUT32(pXGI->IOBase, BR(11), ls);\ 841 G2CmdQueLen --; 842#define Volari_SetupStyleHigh(ls) \ 843 if (G2CmdQueLen <= 0) Volari_Idle(pXGI);\ 844 MMIO_OUT32(pXGI->IOBase, BR(12), ls);\ 845 G2CmdQueLen --; 846***********************************************************************/ 847 848 849/*********************************************************************** 850 * For Line Drawing 851 ***********************************************************************/ 852 853#define Volari_SetupX0Y0(x,y) \ 854 {\ 855 unsigned long ulTemp ;\ 856 \ 857 if((x != g_src_y) || (y != g_src_x)) \ 858 { \ 859 g_src_x = y; \ 860 g_src_y = x; \ 861 ulTemp = Volari_GetSwWP() ;\ 862 \ 863 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 864 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(2)) ;\ 865 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 866 (CARD32)BE_SWAP32(((y)<<16) | ((x)&0xFFFF) ) ;\ 867 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 868 { \ 869 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 870 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 871 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 872 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 873 ulTemp += 0x10 ;\ 874 } \ 875 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 876 ulTemp += 0x08 ;\ 877 ulTemp &= pXGI->cmdQueueSizeMask ;\ 878 Volari_UpdateSwWP(ulTemp) ;\ 879 } \ 880 } 881 882#define Volari_SetupX1Y1(x,y) \ 883 {\ 884 unsigned long ulTemp ;\ 885 \ 886 if((x != g_dst_y) || (y != g_dst_x)) \ 887 { \ 888 g_dst_x = y; \ 889 g_dst_y = x; \ 890 ulTemp = Volari_GetSwWP() ;\ 891 \ 892 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 893 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(3)) ;\ 894 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 895 (CARD32)BE_SWAP32(((y)<<16) | ((x)&0xFFFF) ) ;\ 896 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 897 { \ 898 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 899 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 900 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 901 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 902 ulTemp += 0x10 ;\ 903 } \ 904 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 905 ulTemp += 0x08 ;\ 906 ulTemp &= pXGI->cmdQueueSizeMask ;\ 907 Volari_UpdateSwWP(ulTemp) ;\ 908 } \ 909 } 910 911#define Volari_SetupLineCount(c) \ 912 {\ 913 unsigned long ulTemp ;\ 914 \ 915 ulTemp = Volari_GetSwWP() ;\ 916 \ 917 if(c != g_width) \ 918 { \ 919 g_width = c; \ 920 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 921 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(6) + 0x30000 ) ;\ 922 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 923 (CARD32)BE_SWAP32(((c)&0xffff)) ;\ 924 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 925 { \ 926 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 927 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 928 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 929 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 930 ulTemp += 0x10 ;\ 931 } \ 932 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 933 ulTemp += 0x08 ;\ 934 ulTemp &= pXGI->cmdQueueSizeMask ;\ 935 Volari_UpdateSwWP(ulTemp) ;\ 936 } \ 937 } 938 939#define Volari_SetupStylePeriod(p) \ 940 {\ 941 unsigned long ulTemp ;\ 942 \ 943 if(p != g_height) \ 944 { \ 945 g_height = c; \ 946 ulTemp = Volari_GetSwWP() ;\ 947 \ 948 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 949 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(6) + 0xC0000 ) ;\ 950 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 951 (CARD32)BE_SWAP32(((p)<<16)) ;\ 952 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 953 { \ 954 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 955 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 956 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 957 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 958 ulTemp += 0x10 ;\ 959 } \ 960 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 961 ulTemp += 0x08 ;\ 962 ulTemp &= pXGI->cmdQueueSizeMask ;\ 963 Volari_UpdateSwWP(ulTemp) ;\ 964 } \ 965 } 966 967#define Volari_SetupStylePeriodCount(p,c) \ 968 {\ 969 unsigned long ulTemp ;\ 970 \ 971 if((c != g_width) || (p != g_height)) \ 972 { \ 973 g_width = c; \ 974 g_height = p; \ 975 ulTemp = Volari_GetSwWP() ;\ 976 \ 977 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 978 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(6)) ;\ 979 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 980 (CARD32)BE_SWAP32(((p)<<16)|((c)&0xffff)) ;\ 981 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 982 { \ 983 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 984 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 985 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 986 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 987 ulTemp += 0x10 ;\ 988 } \ 989 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 990 ulTemp += 0x08 ;\ 991 ulTemp &= pXGI->cmdQueueSizeMask ;\ 992 Volari_UpdateSwWP(ulTemp) ;\ 993 } \ 994 } 995 996#define Volari_SetupStyle(ls,hs) \ 997 {\ 998 unsigned long ulTemp ;\ 999 \ 1000 ulTemp = Volari_GetSwWP() ;\ 1001 \ 1002 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp) = \ 1003 (CARD32)BE_SWAP32(GR_SKPC_HEADER + BR(11)) ;\ 1004 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+4) =\ 1005 (CARD32)BE_SWAP32(ls) ;\ 1006 if( pXGI->Chipset == PCI_CHIP_XGIXG40 ) \ 1007 { \ 1008 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+8) = \ 1009 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 1010 *(CARD32 *)(pXGI->cmdQueueBase+ulTemp+12) = \ 1011 (CARD32)BE_SWAP32(GR_NIL_CMD) ;\ 1012 ulTemp += 0x10 ;\ 1013 } \ 1014 else if(( pXGI->Chipset == PCI_CHIP_XGIXG20 )||( pXGI->Chipset == PCI_CHIP_XGIXG21 )||( pXGI->Chipset == PCI_CHIP_XGIXG27 )) \ 1015 ulTemp += 0x08 ;\ 1016 ulTemp &= pXGI->cmdQueueSizeMask ;\ 1017 Volari_UpdateSwWP(ulTemp) ;\ 1018 \ 1019 } 1020 1021#endif /* _XGI_315_ACCEL_H_ */ 1022 1023