mga_drv.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:18k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* mga_drv.h -- Private header for the Matrox G200/G400 driver -*- linux-c -*-
  2.  * Created: Mon Dec 13 01:50:01 1999 by jhartmann@precisioninsight.com
  3.  *
  4.  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
  5.  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
  6.  * All rights reserved.
  7.  *
  8.  * Permission is hereby granted, free of charge, to any person obtaining a
  9.  * copy of this software and associated documentation files (the "Software"),
  10.  * to deal in the Software without restriction, including without limitation
  11.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  12.  * and/or sell copies of the Software, and to permit persons to whom the
  13.  * Software is furnished to do so, subject to the following conditions:
  14.  *
  15.  * The above copyright notice and this permission notice (including the next
  16.  * paragraph) shall be included in all copies or substantial portions of the
  17.  * Software.
  18.  *
  19.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  20.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  22.  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  23.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  24.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  25.  * OTHER DEALINGS IN THE SOFTWARE.
  26.  *
  27.  * Authors:
  28.  *    Gareth Hughes <gareth@valinux.com>
  29.  */
  30. #ifndef __MGA_DRV_H__
  31. #define __MGA_DRV_H__
  32. typedef struct drm_mga_primary_buffer {
  33. u8 *start;
  34. u8 *end;
  35. int size;
  36. u32 tail;
  37. int space;
  38. volatile int wrapped;
  39. volatile u32 *status;
  40. u32 last_flush;
  41. u32 last_wrap;
  42. u32 high_mark;
  43. spinlock_t list_lock;
  44. } drm_mga_primary_buffer_t;
  45. typedef struct drm_mga_freelist {
  46.     struct drm_mga_freelist *next;
  47.     struct drm_mga_freelist *prev;
  48. drm_mga_age_t age;
  49.     drm_buf_t *buf;
  50. } drm_mga_freelist_t;
  51. typedef struct {
  52.     drm_mga_freelist_t *list_entry;
  53. int discard;
  54. int dispatched;
  55. } drm_mga_buf_priv_t;
  56. typedef struct drm_mga_private {
  57. drm_mga_primary_buffer_t prim;
  58. drm_mga_sarea_t *sarea_priv;
  59.     drm_mga_freelist_t *head;
  60.     drm_mga_freelist_t *tail;
  61. unsigned int warp_pipe;
  62. unsigned long warp_pipe_phys[MGA_MAX_WARP_PIPES];
  63. int chipset;
  64. int usec_timeout;
  65. u32 clear_cmd;
  66. u32 maccess;
  67. unsigned int fb_cpp;
  68. unsigned int front_offset;
  69. unsigned int front_pitch;
  70. unsigned int back_offset;
  71. unsigned int back_pitch;
  72. unsigned int depth_cpp;
  73. unsigned int depth_offset;
  74. unsigned int depth_pitch;
  75. unsigned int texture_offset;
  76. unsigned int texture_size;
  77. drm_map_t *sarea;
  78. drm_map_t *fb;
  79. drm_map_t *mmio;
  80. drm_map_t *status;
  81. drm_map_t *warp;
  82. drm_map_t *primary;
  83. drm_map_t *buffers;
  84. drm_map_t *agp_textures;
  85. } drm_mga_private_t;
  86. /* mga_dma.c */
  87. extern int mga_dma_init( struct inode *inode, struct file *filp,
  88.  unsigned int cmd, unsigned long arg );
  89. extern int mga_dma_flush( struct inode *inode, struct file *filp,
  90.   unsigned int cmd, unsigned long arg );
  91. extern int mga_dma_reset( struct inode *inode, struct file *filp,
  92.   unsigned int cmd, unsigned long arg );
  93. extern int mga_dma_buffers( struct inode *inode, struct file *filp,
  94.     unsigned int cmd, unsigned long arg );
  95. extern int mga_do_wait_for_idle( drm_mga_private_t *dev_priv );
  96. extern int mga_do_dma_idle( drm_mga_private_t *dev_priv );
  97. extern int mga_do_dma_reset( drm_mga_private_t *dev_priv );
  98. extern int mga_do_engine_reset( drm_mga_private_t *dev_priv );
  99. extern int mga_do_cleanup_dma( drm_device_t *dev );
  100. extern void mga_do_dma_flush( drm_mga_private_t *dev_priv );
  101. extern void mga_do_dma_wrap_start( drm_mga_private_t *dev_priv );
  102. extern void mga_do_dma_wrap_end( drm_mga_private_t *dev_priv );
  103. extern int mga_freelist_put( drm_device_t *dev, drm_buf_t *buf );
  104. /* mga_state.c */
  105. extern int  mga_dma_clear( struct inode *inode, struct file *filp,
  106.    unsigned int cmd, unsigned long arg );
  107. extern int  mga_dma_swap( struct inode *inode, struct file *filp,
  108.   unsigned int cmd, unsigned long arg );
  109. extern int  mga_dma_vertex( struct inode *inode, struct file *filp,
  110.     unsigned int cmd, unsigned long arg );
  111. extern int  mga_dma_indices( struct inode *inode, struct file *filp,
  112.      unsigned int cmd, unsigned long arg );
  113. extern int  mga_dma_iload( struct inode *inode, struct file *filp,
  114.    unsigned int cmd, unsigned long arg );
  115. extern int  mga_dma_blit( struct inode *inode, struct file *filp,
  116.   unsigned int cmd, unsigned long arg );
  117. /* mga_warp.c */
  118. extern int mga_warp_install_microcode( drm_mga_private_t *dev_priv );
  119. extern int mga_warp_init( drm_mga_private_t *dev_priv );
  120. #define mga_flush_write_combine() mb()
  121. #define MGA_BASE( reg ) ((unsigned long)(dev_priv->mmio->handle))
  122. #define MGA_ADDR( reg ) (MGA_BASE(reg) + reg)
  123. #define MGA_DEREF( reg ) *(volatile u32 *)MGA_ADDR( reg )
  124. #define MGA_DEREF8( reg ) *(volatile u8 *)MGA_ADDR( reg )
  125. #ifdef __alpha__
  126. #define MGA_READ( reg ) (_MGA_READ((u32 *)MGA_ADDR(reg)))
  127. #define MGA_WRITE( reg, val ) do { wmb(); MGA_DEREF( reg ) = val; } while (0)
  128. #define MGA_WRITE8( reg, val )  do { wmb(); MGA_DEREF8( reg ) = val; } while (0)
  129. static inline u32 _MGA_READ(u32 *addr)
  130. {
  131. mb();
  132. return *(volatile u32 *)addr;
  133. }
  134. #else
  135. #define MGA_READ( reg ) MGA_DEREF( reg )
  136. #define MGA_WRITE( reg, val ) do { MGA_DEREF( reg ) = val; } while (0)
  137. #define MGA_WRITE8( reg, val )  do { MGA_DEREF8( reg ) = val; } while (0)
  138. #endif
  139. #define DWGREG0  0x1c00
  140. #define DWGREG0_END  0x1dff
  141. #define DWGREG1 0x2c00
  142. #define DWGREG1_END 0x2dff
  143. #define ISREG0(r) (r >= DWGREG0 && r <= DWGREG0_END)
  144. #define DMAREG0(r) (u8)((r - DWGREG0) >> 2)
  145. #define DMAREG1(r) (u8)(((r - DWGREG1) >> 2) | 0x80)
  146. #define DMAREG(r) (ISREG0(r) ? DMAREG0(r) : DMAREG1(r))
  147. /* ================================================================
  148.  * Helper macross...
  149.  */
  150. #define MGA_EMIT_STATE( dev_priv, dirty )
  151. do {
  152. if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) {
  153. if ( dev_priv->chipset == MGA_CARD_TYPE_G400 ) {
  154. mga_g400_emit_state( dev_priv );
  155. } else {
  156. mga_g200_emit_state( dev_priv );
  157. }
  158. }
  159. } while (0)
  160. #define LOCK_TEST_WITH_RETURN( dev )
  161. do {
  162. if ( !_DRM_LOCK_IS_HELD( dev->lock.hw_lock->lock ) ||
  163.      dev->lock.pid != current->pid ) {
  164. DRM_ERROR( "%s called without lock heldn",
  165.    __FUNCTION__ );
  166. return -EINVAL;
  167. }
  168. } while (0)
  169. #define WRAP_TEST_WITH_RETURN( dev_priv )
  170. do {
  171. if ( test_bit( 0, &dev_priv->prim.wrapped ) ) {
  172. if ( mga_is_idle( dev_priv ) ) {
  173. mga_do_dma_wrap_end( dev_priv );
  174. } else if ( dev_priv->prim.space <
  175.     dev_priv->prim.high_mark ) {
  176. if ( MGA_DMA_DEBUG )
  177. DRM_INFO( __FUNCTION__": wrap...n" );
  178. return -EBUSY;
  179. }
  180. }
  181. } while (0)
  182. #define WRAP_WAIT_WITH_RETURN( dev_priv )
  183. do {
  184. if ( test_bit( 0, &dev_priv->prim.wrapped ) ) {
  185. if ( mga_do_wait_for_idle( dev_priv ) < 0 ) {
  186. if ( MGA_DMA_DEBUG )
  187. DRM_INFO( __FUNCTION__": wrap...n" );
  188. return -EBUSY;
  189. }
  190. mga_do_dma_wrap_end( dev_priv );
  191. }
  192. } while (0)
  193. /* ================================================================
  194.  * Primary DMA command stream
  195.  */
  196. #define MGA_VERBOSE 0
  197. #define DMA_LOCALS unsigned int write; volatile u8 *prim;
  198. #define DMA_BLOCK_SIZE (5 * sizeof(u32))
  199. #define BEGIN_DMA( n )
  200. do {
  201. if ( MGA_VERBOSE ) {
  202. DRM_INFO( "BEGIN_DMA( %d ) in %sn",
  203.   (n), __FUNCTION__ );
  204. DRM_INFO( "   space=0x%x req=0x%xn",
  205.   dev_priv->prim.space, (n) * DMA_BLOCK_SIZE );
  206. }
  207. prim = dev_priv->prim.start;
  208. write = dev_priv->prim.tail;
  209. } while (0)
  210. #define BEGIN_DMA_WRAP()
  211. do {
  212. if ( MGA_VERBOSE ) {
  213. DRM_INFO( "BEGIN_DMA() in %sn", __FUNCTION__ );
  214. DRM_INFO( "   space=0x%xn", dev_priv->prim.space );
  215. }
  216. prim = dev_priv->prim.start;
  217. write = dev_priv->prim.tail;
  218. } while (0)
  219. #define ADVANCE_DMA()
  220. do {
  221. dev_priv->prim.tail = write;
  222. if ( MGA_VERBOSE ) {
  223. DRM_INFO( "ADVANCE_DMA() tail=0x%05x sp=0x%xn",
  224.   write, dev_priv->prim.space );
  225. }
  226. } while (0)
  227. #define FLUSH_DMA()
  228. do {
  229. if ( 0 ) {
  230. DRM_INFO( __FUNCTION__ ":n" );
  231. DRM_INFO( "   tail=0x%06x head=0x%06lxn",
  232.   dev_priv->prim.tail,
  233.   MGA_READ( MGA_PRIMADDRESS ) -
  234.   dev_priv->primary->offset );
  235. }
  236. if ( !test_bit( 0, &dev_priv->prim.wrapped ) ) {
  237. if ( dev_priv->prim.space <
  238.      dev_priv->prim.high_mark ) {
  239. mga_do_dma_wrap_start( dev_priv );
  240. } else {
  241. mga_do_dma_flush( dev_priv );
  242. }
  243. }
  244. } while (0)
  245. /* Never use this, always use DMA_BLOCK(...) for primary DMA output.
  246.  */
  247. #define DMA_WRITE( offset, val )
  248. do {
  249. if ( MGA_VERBOSE ) {
  250. DRM_INFO( "   DMA_WRITE( 0x%08x ) at 0x%04xn",
  251.   (u32)(val), write + (offset) * sizeof(u32) );
  252. }
  253. *(volatile u32 *)(prim + write + (offset) * sizeof(u32)) = val;
  254. } while (0)
  255. #define DMA_BLOCK( reg0, val0, reg1, val1, reg2, val2, reg3, val3 )
  256. do {
  257. DMA_WRITE( 0, ((DMAREG( reg0 ) << 0) |
  258.        (DMAREG( reg1 ) << 8) |
  259.        (DMAREG( reg2 ) << 16) |
  260.        (DMAREG( reg3 ) << 24)) );
  261. DMA_WRITE( 1, val0 );
  262. DMA_WRITE( 2, val1 );
  263. DMA_WRITE( 3, val2 );
  264. DMA_WRITE( 4, val3 );
  265. write += DMA_BLOCK_SIZE;
  266. } while (0)
  267. /* Buffer aging via primary DMA stream head pointer.
  268.  */
  269. #define SET_AGE( age, h, w )
  270. do {
  271. (age)->head = h;
  272. (age)->wrap = w;
  273. } while (0)
  274. #define TEST_AGE( age, h, w ) ( (age)->wrap < w ||
  275.   ( (age)->wrap == w &&
  276.     (age)->head < h ) )
  277. #define AGE_BUFFER( buf_priv )
  278. do {
  279. drm_mga_freelist_t *entry = (buf_priv)->list_entry;
  280. if ( (buf_priv)->dispatched ) {
  281. entry->age.head = (dev_priv->prim.tail +
  282.    dev_priv->primary->offset);
  283. entry->age.wrap = dev_priv->sarea_priv->last_wrap;
  284. } else {
  285. entry->age.head = 0;
  286. entry->age.wrap = 0;
  287. }
  288. } while (0)
  289. #define MGA_ENGINE_IDLE_MASK (MGA_SOFTRAPEN |
  290.  MGA_DWGENGSTS |
  291.  MGA_ENDPRDMASTS)
  292. #define MGA_DMA_IDLE_MASK (MGA_SOFTRAPEN |
  293.  MGA_ENDPRDMASTS)
  294. #define MGA_DMA_DEBUG 0
  295. /* A reduced set of the mga registers.
  296.  */
  297. #define MGA_CRTC_INDEX 0x1fd4
  298. #define MGA_ALPHACTRL  0x2c7c
  299. #define MGA_AR0  0x1c60
  300. #define MGA_AR1  0x1c64
  301. #define MGA_AR2  0x1c68
  302. #define MGA_AR3  0x1c6c
  303. #define MGA_AR4  0x1c70
  304. #define MGA_AR5  0x1c74
  305. #define MGA_AR6  0x1c78
  306. #define MGA_CXBNDRY 0x1c80
  307. #define MGA_CXLEFT  0x1ca0
  308. #define MGA_CXRIGHT 0x1ca4
  309. #define MGA_DMAPAD  0x1c54
  310. #define MGA_DSTORG  0x2cb8
  311. #define MGA_DWGCTL  0x1c00
  312. # define MGA_OPCOD_MASK (15 << 0)
  313. # define MGA_OPCOD_TRAP (4 << 0)
  314. # define MGA_OPCOD_TEXTURE_TRAP (6 << 0)
  315. # define MGA_OPCOD_BITBLT (8 << 0)
  316. # define MGA_OPCOD_ILOAD (9 << 0)
  317. # define MGA_ATYPE_MASK (7 << 4)
  318. # define MGA_ATYPE_RPL (0 << 4)
  319. # define MGA_ATYPE_RSTR (1 << 4)
  320. # define MGA_ATYPE_ZI (3 << 4)
  321. # define MGA_ATYPE_BLK (4 << 4)
  322. # define MGA_ATYPE_I (7 << 4)
  323. # define MGA_LINEAR (1 << 7)
  324. # define MGA_ZMODE_MASK (7 << 8)
  325. # define MGA_ZMODE_NOZCMP (0 << 8)
  326. # define MGA_ZMODE_ZE (2 << 8)
  327. # define MGA_ZMODE_ZNE (3 << 8)
  328. # define MGA_ZMODE_ZLT (4 << 8)
  329. # define MGA_ZMODE_ZLTE (5 << 8)
  330. # define MGA_ZMODE_ZGT (6 << 8)
  331. # define MGA_ZMODE_ZGTE (7 << 8)
  332. # define MGA_SOLID (1 << 11)
  333. # define MGA_ARZERO (1 << 12)
  334. # define MGA_SGNZERO (1 << 13)
  335. # define MGA_SHIFTZERO (1 << 14)
  336. # define MGA_BOP_MASK (15 << 16)
  337. # define MGA_BOP_ZERO (0 << 16)
  338. # define MGA_BOP_DST (10 << 16)
  339. # define MGA_BOP_SRC (12 << 16)
  340. # define MGA_BOP_ONE (15 << 16)
  341. # define MGA_TRANS_SHIFT 20
  342. # define MGA_TRANS_MASK (15 << 20)
  343. # define MGA_BLTMOD_MASK (15 << 25)
  344. # define MGA_BLTMOD_BMONOLEF (0 << 25)
  345. # define MGA_BLTMOD_BMONOWF (4 << 25)
  346. # define MGA_BLTMOD_PLAN (1 << 25)
  347. # define MGA_BLTMOD_BFCOL (2 << 25)
  348. # define MGA_BLTMOD_BU32BGR (3 << 25)
  349. # define MGA_BLTMOD_BU32RGB (7 << 25)
  350. # define MGA_BLTMOD_BU24BGR (11 << 25)
  351. # define MGA_BLTMOD_BU24RGB (15 << 25)
  352. # define MGA_PATTERN (1 << 29)
  353. # define MGA_TRANSC (1 << 30)
  354. # define MGA_CLIPDIS (1 << 31)
  355. #define MGA_DWGSYNC 0x2c4c
  356. #define MGA_FCOL  0x1c24
  357. #define MGA_FIFOSTATUS  0x1e10
  358. #define MGA_FOGCOL  0x1cf4
  359. #define MGA_FXBNDRY 0x1c84
  360. #define MGA_FXLEFT  0x1ca8
  361. #define MGA_FXRIGHT 0x1cac
  362. #define MGA_ICLEAR  0x1e18
  363. # define MGA_SOFTRAPICLR (1 << 0)
  364. #define MGA_IEN  0x1e1c
  365. # define MGA_SOFTRAPIEN (1 << 0)
  366. #define MGA_LEN  0x1c5c
  367. #define MGA_MACCESS 0x1c04
  368. #define MGA_PITCH  0x1c8c
  369. #define MGA_PLNWT  0x1c1c
  370. #define MGA_PRIMADDRESS  0x1e58
  371. # define MGA_DMA_GENERAL (0 << 0)
  372. # define MGA_DMA_BLIT (1 << 0)
  373. # define MGA_DMA_VECTOR (2 << 0)
  374. # define MGA_DMA_VERTEX (3 << 0)
  375. #define MGA_PRIMEND 0x1e5c
  376. # define MGA_PRIMNOSTART (1 << 0)
  377. # define MGA_PAGPXFER (1 << 1)
  378. #define MGA_PRIMPTR 0x1e50
  379. # define MGA_PRIMPTREN0 (1 << 0)
  380. # define MGA_PRIMPTREN1 (1 << 1)
  381. #define MGA_RST  0x1e40
  382. # define MGA_SOFTRESET (1 << 0)
  383. # define MGA_SOFTEXTRST (1 << 1)
  384. #define MGA_SECADDRESS  0x2c40
  385. #define MGA_SECEND  0x2c44
  386. #define MGA_SETUPADDRESS  0x2cd0
  387. #define MGA_SETUPEND  0x2cd4
  388. #define MGA_SGN 0x1c58
  389. #define MGA_SOFTRAP 0x2c48
  390. #define MGA_SRCORG  0x2cb4
  391. # define MGA_SRMMAP_MASK (1 << 0)
  392. # define MGA_SRCMAP_FB (0 << 0)
  393. # define MGA_SRCMAP_SYSMEM (1 << 0)
  394. # define MGA_SRCACC_MASK (1 << 1)
  395. # define MGA_SRCACC_PCI (0 << 1)
  396. # define MGA_SRCACC_AGP (1 << 1)
  397. #define MGA_STATUS  0x1e14
  398. # define MGA_SOFTRAPEN (1 << 0)
  399. # define MGA_DWGENGSTS (1 << 16)
  400. # define MGA_ENDPRDMASTS (1 << 17)
  401. #define MGA_STENCIL 0x2cc8
  402. #define MGA_STENCILCTL  0x2ccc
  403. #define MGA_TDUALSTAGE0  0x2cf8
  404. #define MGA_TDUALSTAGE1  0x2cfc
  405. #define MGA_TEXBORDERCOL  0x2c5c
  406. #define MGA_TEXCTL  0x2c30
  407. #define MGA_TEXCTL2 0x2c3c
  408. # define MGA_DUALTEX (1 << 7)
  409. # define MGA_G400_TC2_MAGIC (1 << 15)
  410. # define MGA_MAP1_ENABLE (1 << 31)
  411. #define MGA_TEXFILTER  0x2c58
  412. #define MGA_TEXHEIGHT  0x2c2c
  413. #define MGA_TEXORG  0x2c24
  414. # define MGA_TEXORGMAP_MASK (1 << 0)
  415. # define MGA_TEXORGMAP_FB (0 << 0)
  416. # define MGA_TEXORGMAP_SYSMEM (1 << 0)
  417. # define MGA_TEXORGACC_MASK (1 << 1)
  418. # define MGA_TEXORGACC_PCI (0 << 1)
  419. # define MGA_TEXORGACC_AGP (1 << 1)
  420. #define MGA_TEXORG1 0x2ca4
  421. #define MGA_TEXORG2 0x2ca8
  422. #define MGA_TEXORG3 0x2cac
  423. #define MGA_TEXORG4 0x2cb0
  424. #define MGA_TEXTRANS  0x2c34
  425. #define MGA_TEXTRANSHIGH  0x2c38
  426. #define MGA_TEXWIDTH  0x2c28
  427. #define MGA_WACCEPTSEQ  0x1dd4
  428. #define MGA_WCODEADDR  0x1e6c
  429. #define MGA_WFLAG  0x1dc4
  430. #define MGA_WFLAG1  0x1de0
  431. #define MGA_WFLAGNB 0x1e64
  432. #define MGA_WFLAGNB1  0x1e08
  433. #define MGA_WGETMSB 0x1dc8
  434. #define MGA_WIADDR  0x1dc0
  435. #define MGA_WIADDR2 0x1dd8
  436. # define MGA_WMODE_SUSPEND (0 << 0)
  437. # define MGA_WMODE_RESUME (1 << 0)
  438. # define MGA_WMODE_JUMP (2 << 0)
  439. # define MGA_WMODE_START (3 << 0)
  440. # define MGA_WAGP_ENABLE (1 << 2)
  441. #define MGA_WMISC  0x1e70
  442. # define MGA_WUCODECACHE_ENABLE (1 << 0)
  443. # define MGA_WMASTER_ENABLE (1 << 1)
  444. # define MGA_WCACHEFLUSH_ENABLE (1 << 3)
  445. #define MGA_WVRTXSZ 0x1dcc
  446. #define MGA_YBOT  0x1c9c
  447. #define MGA_YDST  0x1c90
  448. #define MGA_YDSTLEN 0x1c88
  449. #define MGA_YDSTORG 0x1c94
  450. #define MGA_YTOP  0x1c98
  451. #define MGA_ZORG  0x1c0c
  452. /* This finishes the current batch of commands
  453.  */
  454. #define MGA_EXEC  0x0100
  455. /* Warp registers
  456.  */
  457. #define MGA_WR0 0x2d00
  458. #define MGA_WR1 0x2d04
  459. #define MGA_WR2 0x2d08
  460. #define MGA_WR3 0x2d0c
  461. #define MGA_WR4 0x2d10
  462. #define MGA_WR5 0x2d14
  463. #define MGA_WR6 0x2d18
  464. #define MGA_WR7 0x2d1c
  465. #define MGA_WR8 0x2d20
  466. #define MGA_WR9 0x2d24
  467. #define MGA_WR10 0x2d28
  468. #define MGA_WR11 0x2d2c
  469. #define MGA_WR12 0x2d30
  470. #define MGA_WR13 0x2d34
  471. #define MGA_WR14 0x2d38
  472. #define MGA_WR15 0x2d3c
  473. #define MGA_WR16 0x2d40
  474. #define MGA_WR17 0x2d44
  475. #define MGA_WR18 0x2d48
  476. #define MGA_WR19 0x2d4c
  477. #define MGA_WR20 0x2d50
  478. #define MGA_WR21 0x2d54
  479. #define MGA_WR22 0x2d58
  480. #define MGA_WR23 0x2d5c
  481. #define MGA_WR24 0x2d60
  482. #define MGA_WR25 0x2d64
  483. #define MGA_WR26 0x2d68
  484. #define MGA_WR27 0x2d6c
  485. #define MGA_WR28 0x2d70
  486. #define MGA_WR29 0x2d74
  487. #define MGA_WR30 0x2d78
  488. #define MGA_WR31 0x2d7c
  489. #define MGA_WR32 0x2d80
  490. #define MGA_WR33 0x2d84
  491. #define MGA_WR34 0x2d88
  492. #define MGA_WR35 0x2d8c
  493. #define MGA_WR36 0x2d90
  494. #define MGA_WR37 0x2d94
  495. #define MGA_WR38 0x2d98
  496. #define MGA_WR39 0x2d9c
  497. #define MGA_WR40 0x2da0
  498. #define MGA_WR41 0x2da4
  499. #define MGA_WR42 0x2da8
  500. #define MGA_WR43 0x2dac
  501. #define MGA_WR44 0x2db0
  502. #define MGA_WR45 0x2db4
  503. #define MGA_WR46 0x2db8
  504. #define MGA_WR47 0x2dbc
  505. #define MGA_WR48 0x2dc0
  506. #define MGA_WR49 0x2dc4
  507. #define MGA_WR50 0x2dc8
  508. #define MGA_WR51 0x2dcc
  509. #define MGA_WR52 0x2dd0
  510. #define MGA_WR53 0x2dd4
  511. #define MGA_WR54 0x2dd8
  512. #define MGA_WR55 0x2ddc
  513. #define MGA_WR56 0x2de0
  514. #define MGA_WR57 0x2de4
  515. #define MGA_WR58 0x2de8
  516. #define MGA_WR59 0x2dec
  517. #define MGA_WR60 0x2df0
  518. #define MGA_WR61 0x2df4
  519. #define MGA_WR62 0x2df8
  520. #define MGA_WR63 0x2dfc
  521. # define MGA_G400_WR_MAGIC (1 << 6)
  522. # define MGA_G400_WR56_MAGIC 0x46480000 /* 12800.0f */
  523. #define MGA_ILOAD_ALIGN 64
  524. #define MGA_ILOAD_MASK (MGA_ILOAD_ALIGN - 1)
  525. #define MGA_DWGCTL_FLUSH (MGA_OPCOD_TEXTURE_TRAP |
  526.  MGA_ATYPE_I |
  527.  MGA_ZMODE_NOZCMP |
  528.  MGA_ARZERO |
  529.  MGA_SGNZERO |
  530.  MGA_BOP_SRC |
  531.  (15 << MGA_TRANS_SHIFT))
  532. #define MGA_DWGCTL_CLEAR (MGA_OPCOD_TRAP |
  533.  MGA_ZMODE_NOZCMP |
  534.  MGA_SOLID |
  535.  MGA_ARZERO |
  536.  MGA_SGNZERO |
  537.  MGA_SHIFTZERO |
  538.  MGA_BOP_SRC |
  539.  (0 << MGA_TRANS_SHIFT) |
  540.  MGA_BLTMOD_BMONOLEF |
  541.  MGA_TRANSC |
  542.  MGA_CLIPDIS)
  543. #define MGA_DWGCTL_COPY (MGA_OPCOD_BITBLT |
  544.  MGA_ATYPE_RPL |
  545.  MGA_SGNZERO |
  546.  MGA_SHIFTZERO |
  547.  MGA_BOP_SRC |
  548.  (0 << MGA_TRANS_SHIFT) |
  549.  MGA_BLTMOD_BFCOL |
  550.  MGA_CLIPDIS)
  551. /* Simple idle test.
  552.  */
  553. static inline int mga_is_idle( drm_mga_private_t *dev_priv )
  554. {
  555. u32 status = MGA_READ( MGA_STATUS ) & MGA_ENGINE_IDLE_MASK;
  556. return ( status == MGA_ENDPRDMASTS );
  557. }
  558. #endif