PageRenderTime 56ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/src/xgi_accel.h

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