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

嵌入式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.  * PRECISION INSIGHT 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 OTHER
  25.  * DEALINGS IN THE SOFTWARE.
  26.  *
  27.  * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
  28.  *      Jeff Hartmann <jhartmann@valinux.com>
  29.  *
  30.  */
  31. #ifndef _MGA_DRV_H_
  32. #define _MGA_DRV_H_
  33. #define MGA_BUF_IN_USE         0
  34. #define MGA_BUF_SWAP_PENDING   1
  35. #define MGA_BUF_FORCE_FIRE     2
  36. #define MGA_BUF_NEEDS_OVERFLOW 3
  37. typedef struct {
  38. long buffer_status; /* long req'd for set_bit() --RR */
  39.     int num_dwords;
  40.     int max_dwords;
  41.     u32 *current_dma_ptr;
  42.     u32 *head;
  43.     u32 phys_head;
  44. unsigned int prim_age;
  45.     int sec_used;
  46.     int idx;
  47. } drm_mga_prim_buf_t;
  48. typedef struct _drm_mga_freelist {
  49.     __volatile__ unsigned int age;
  50.     drm_buf_t *buf;
  51.     struct _drm_mga_freelist *next;
  52.     struct _drm_mga_freelist *prev;
  53. } drm_mga_freelist_t;
  54. #define MGA_IN_DISPATCH   0
  55. #define MGA_IN_FLUSH      1
  56. #define MGA_IN_WAIT       2
  57. #define MGA_IN_GETBUF   3
  58. typedef struct _drm_mga_private {
  59.     long dispatch_status;  /* long req'd for set_bit() --RR */
  60. unsigned int next_prim_age;
  61. __volatile__ unsigned int last_prim_age;
  62.     int reserved_map_idx;
  63.     int buffer_map_idx;
  64.     drm_mga_sarea_t *sarea_priv;
  65.     int primary_size;
  66.     int warp_ucode_size;
  67.     int chipset;
  68.     unsigned int frontOffset;
  69.     unsigned int backOffset;
  70.     unsigned int depthOffset;
  71.     unsigned int textureOffset;
  72.     unsigned int textureSize;
  73.     int cpp;
  74.     unsigned int stride;
  75.     int sgram;
  76. int use_agp;
  77.     drm_mga_warp_index_t WarpIndex[MGA_MAX_G400_PIPES];
  78. unsigned int WarpPipe;
  79. unsigned int vertexsize;
  80.     atomic_t pending_bufs;
  81.     void *status_page;
  82.     unsigned long real_status_page;
  83.     u8 *ioremap;
  84.     drm_mga_prim_buf_t **prim_bufs;
  85.     drm_mga_prim_buf_t *next_prim;
  86.     drm_mga_prim_buf_t *last_prim;
  87.     drm_mga_prim_buf_t *current_prim;
  88.     int current_prim_idx;
  89.     drm_mga_freelist_t *head;
  90.     drm_mga_freelist_t *tail;
  91.     wait_queue_head_t flush_queue; /* Processes waiting until flush    */
  92.        wait_queue_head_t wait_queue; /* Processes waiting until interrupt */
  93. wait_queue_head_t buf_queue;    /* Processes waiting for a free buf */
  94. /* Some validated register values:
  95.  */
  96. u32 mAccess;
  97. } drm_mga_private_t;
  98. /* mga_drv.c */
  99. extern int  mga_version(struct inode *inode, struct file *filp,
  100.   unsigned int cmd, unsigned long arg);
  101. extern int  mga_open(struct inode *inode, struct file *filp);
  102. extern int  mga_release(struct inode *inode, struct file *filp);
  103. extern int  mga_ioctl(struct inode *inode, struct file *filp,
  104. unsigned int cmd, unsigned long arg);
  105. extern int  mga_unlock(struct inode *inode, struct file *filp,
  106.  unsigned int cmd, unsigned long arg);
  107. /* mga_dma.c */
  108. extern int  mga_dma_schedule(drm_device_t *dev, int locked);
  109. extern int  mga_dma(struct inode *inode, struct file *filp,
  110.       unsigned int cmd, unsigned long arg);
  111. extern int  mga_irq_install(drm_device_t *dev, int irq);
  112. extern int  mga_irq_uninstall(drm_device_t *dev);
  113. extern int  mga_control(struct inode *inode, struct file *filp,
  114.   unsigned int cmd, unsigned long arg);
  115. extern int  mga_lock(struct inode *inode, struct file *filp,
  116.        unsigned int cmd, unsigned long arg);
  117. /* mga_dma_init does init and release */
  118. extern int mga_dma_init(struct inode *inode, struct file *filp,
  119. unsigned int cmd, unsigned long arg);
  120. extern int mga_dma_cleanup(drm_device_t *dev);
  121. extern int mga_flush_ioctl(struct inode *inode, struct file *filp,
  122.    unsigned int cmd, unsigned long arg);
  123. extern unsigned int mga_create_sync_tag(drm_device_t *dev);
  124. extern drm_buf_t *mga_freelist_get(drm_device_t *dev);
  125. extern int mga_freelist_put(drm_device_t *dev, drm_buf_t *buf);
  126. extern int mga_advance_primary(drm_device_t *dev);
  127. extern void mga_reclaim_buffers(drm_device_t *dev, pid_t pid);
  128. /* mga_bufs.c */
  129. extern int  mga_addbufs(struct inode *inode, struct file *filp,
  130. unsigned int cmd, unsigned long arg);
  131. extern int  mga_infobufs(struct inode *inode, struct file *filp,
  132.  unsigned int cmd, unsigned long arg);
  133. extern int  mga_markbufs(struct inode *inode, struct file *filp,
  134.  unsigned int cmd, unsigned long arg);
  135. extern int  mga_freebufs(struct inode *inode, struct file *filp,
  136.  unsigned int cmd, unsigned long arg);
  137. extern int  mga_mapbufs(struct inode *inode, struct file *filp,
  138. unsigned int cmd, unsigned long arg);
  139. extern int  mga_addmap(struct inode *inode, struct file *filp,
  140.        unsigned int cmd, unsigned long arg);
  141. /* mga_state.c */
  142. extern int  mga_clear_bufs(struct inode *inode, struct file *filp,
  143.    unsigned int cmd, unsigned long arg);
  144. extern int  mga_swap_bufs(struct inode *inode, struct file *filp,
  145.   unsigned int cmd, unsigned long arg);
  146. extern int  mga_iload(struct inode *inode, struct file *filp,
  147.       unsigned int cmd, unsigned long arg);
  148. extern int  mga_vertex(struct inode *inode, struct file *filp,
  149.       unsigned int cmd, unsigned long arg);
  150. extern int  mga_indices(struct inode *inode, struct file *filp,
  151. unsigned int cmd, unsigned long arg);
  152. /* mga_context.c */
  153. extern int  mga_resctx(struct inode *inode, struct file *filp,
  154.        unsigned int cmd, unsigned long arg);
  155. extern int  mga_addctx(struct inode *inode, struct file *filp,
  156.        unsigned int cmd, unsigned long arg);
  157. extern int  mga_modctx(struct inode *inode, struct file *filp,
  158.        unsigned int cmd, unsigned long arg);
  159. extern int  mga_getctx(struct inode *inode, struct file *filp,
  160.        unsigned int cmd, unsigned long arg);
  161. extern int  mga_switchctx(struct inode *inode, struct file *filp,
  162.   unsigned int cmd, unsigned long arg);
  163. extern int  mga_newctx(struct inode *inode, struct file *filp,
  164.        unsigned int cmd, unsigned long arg);
  165. extern int  mga_rmctx(struct inode *inode, struct file *filp,
  166.       unsigned int cmd, unsigned long arg);
  167. extern int  mga_context_switch(drm_device_t *dev, int old, int new);
  168. extern int  mga_context_switch_complete(drm_device_t *dev, int new);
  169. #define mga_flush_write_combine() mb()
  170. typedef enum {
  171. TT_GENERAL,
  172. TT_BLIT,
  173. TT_VECTOR,
  174. TT_VERTEX
  175. } transferType_t;
  176. typedef struct {
  177.     drm_mga_freelist_t *my_freelist;
  178. int discard;
  179. int dispatched;
  180. } drm_mga_buf_priv_t;
  181. #define DWGREG0  0x1c00
  182. #define DWGREG0_END  0x1dff
  183. #define DWGREG1 0x2c00
  184. #define DWGREG1_END 0x2dff
  185. #define ISREG0(r) (r >= DWGREG0 && r <= DWGREG0_END)
  186. #define ADRINDEX0(r) (u8)((r - DWGREG0) >> 2)
  187. #define ADRINDEX1(r) (u8)(((r - DWGREG1) >> 2) | 0x80)
  188. #define ADRINDEX(r) (ISREG0(r) ? ADRINDEX0(r) : ADRINDEX1(r))
  189. #define MGA_VERBOSE 0
  190. #define MGA_NUM_PRIM_BUFS  8
  191. #define PRIMLOCALS u8 tempIndex[4]; u32 *dma_ptr; u32 phys_head; 
  192. int outcount, num_dwords
  193. #define PRIM_OVERFLOW(dev, dev_priv, length) do {    
  194. drm_mga_prim_buf_t *tmp_buf =    
  195.   dev_priv->prim_bufs[dev_priv->current_prim_idx];    
  196. if( test_bit(MGA_BUF_NEEDS_OVERFLOW, &tmp_buf->buffer_status)) {   
  197.   mga_advance_primary(dev);    
  198.   mga_dma_schedule(dev, 1);    
  199. tmp_buf = dev_priv->prim_bufs[dev_priv->current_prim_idx]; 
  200.   } else if( tmp_buf->max_dwords - tmp_buf->num_dwords < length ||   
  201.              tmp_buf->sec_used > MGA_DMA_BUF_NR/2) {    
  202. set_bit(MGA_BUF_FORCE_FIRE, &tmp_buf->buffer_status);    
  203.   mga_advance_primary(dev);    
  204.   mga_dma_schedule(dev, 1);    
  205. tmp_buf = dev_priv->prim_bufs[dev_priv->current_prim_idx]; 
  206. }    
  207. if(MGA_VERBOSE)    
  208. DRM_DEBUG("PRIMGETPTR in %sn", __FUNCTION__);    
  209. dma_ptr = tmp_buf->current_dma_ptr;    
  210. num_dwords = tmp_buf->num_dwords;    
  211. phys_head = tmp_buf->phys_head;    
  212. outcount = 0;    
  213. } while(0)
  214. #define PRIMGETPTR(dev_priv) do {
  215. drm_mga_prim_buf_t *tmp_buf =
  216. dev_priv->prim_bufs[dev_priv->current_prim_idx];
  217. if(MGA_VERBOSE)
  218. DRM_DEBUG("PRIMGETPTR in %sn", __FUNCTION__);
  219. dma_ptr = tmp_buf->current_dma_ptr;
  220. num_dwords = tmp_buf->num_dwords;
  221. phys_head = tmp_buf->phys_head;
  222. outcount = 0;
  223. } while(0)
  224. #define PRIMPTR(prim_buf) do {
  225. if(MGA_VERBOSE)
  226. DRM_DEBUG("PRIMPTR in %sn", __FUNCTION__);
  227. dma_ptr = prim_buf->current_dma_ptr;
  228. num_dwords = prim_buf->num_dwords;
  229. phys_head = prim_buf->phys_head;
  230. outcount = 0;
  231. } while(0)
  232. #define PRIMFINISH(prim_buf) do {
  233. if (MGA_VERBOSE) {
  234. DRM_DEBUG( "PRIMFINISH in %sn", __FUNCTION__);
  235.                 if (outcount & 3)
  236.                       DRM_DEBUG(" --- truncationn");         
  237.         }
  238. prim_buf->num_dwords = num_dwords;
  239. prim_buf->current_dma_ptr = dma_ptr;
  240. } while(0)
  241. #define PRIMADVANCE(dev_priv) do {
  242. drm_mga_prim_buf_t *tmp_buf = 
  243. dev_priv->prim_bufs[dev_priv->current_prim_idx];
  244. if (MGA_VERBOSE) {
  245. DRM_DEBUG("PRIMADVANCE in %sn", __FUNCTION__);
  246.                 if (outcount & 3)
  247.                       DRM_DEBUG(" --- truncationn");
  248.         }
  249. tmp_buf->num_dwords = num_dwords;      
  250. tmp_buf->current_dma_ptr = dma_ptr;    
  251. } while (0)
  252. #define PRIMUPDATE(dev_priv) do {
  253. drm_mga_prim_buf_t *tmp_buf =
  254. dev_priv->prim_bufs[dev_priv->current_prim_idx];
  255. tmp_buf->sec_used++;
  256. } while (0)
  257. #define AGEBUF(dev_priv, buf_priv) do {
  258. drm_mga_prim_buf_t *tmp_buf =
  259. dev_priv->prim_bufs[dev_priv->current_prim_idx];
  260. buf_priv->my_freelist->age = tmp_buf->prim_age;
  261. } while (0)
  262. #define PRIMOUTREG(reg, val) do {
  263. tempIndex[outcount]=ADRINDEX(reg);
  264. dma_ptr[1+outcount] = val;
  265. if (MGA_VERBOSE)
  266. DRM_DEBUG("   PRIMOUT %d: 0x%x -- 0x%xn",
  267.        num_dwords + 1 + outcount, ADRINDEX(reg), val);
  268. if( ++outcount == 4) {
  269. outcount = 0;
  270. dma_ptr[0] = *(unsigned long *)tempIndex;
  271. dma_ptr+=5;
  272. num_dwords += 5;
  273. }
  274. }while (0)
  275. /* A reduced set of the mga registers.
  276.  */
  277. #define MGAREG_MGA_EXEC  0x0100
  278. #define MGAREG_ALPHACTRL  0x2c7c
  279. #define MGAREG_AR0  0x1c60
  280. #define MGAREG_AR1  0x1c64
  281. #define MGAREG_AR2  0x1c68
  282. #define MGAREG_AR3  0x1c6c
  283. #define MGAREG_AR4  0x1c70
  284. #define MGAREG_AR5  0x1c74
  285. #define MGAREG_AR6  0x1c78
  286. #define MGAREG_CXBNDRY 0x1c80
  287. #define MGAREG_CXLEFT  0x1ca0
  288. #define MGAREG_CXRIGHT 0x1ca4
  289. #define MGAREG_DMAPAD  0x1c54
  290. #define MGAREG_DSTORG  0x2cb8
  291. #define MGAREG_DWGCTL  0x1c00
  292. #define MGAREG_DWGSYNC 0x2c4c
  293. #define MGAREG_FCOL  0x1c24
  294. #define MGAREG_FIFOSTATUS  0x1e10
  295. #define MGAREG_FOGCOL  0x1cf4
  296. #define MGAREG_FXBNDRY 0x1c84
  297. #define MGAREG_FXLEFT  0x1ca8
  298. #define MGAREG_FXRIGHT 0x1cac
  299. #define MGAREG_ICLEAR  0x1e18
  300. #define MGAREG_IEN  0x1e1c
  301. #define MGAREG_LEN  0x1c5c
  302. #define MGAREG_MACCESS 0x1c04
  303. #define MGAREG_PITCH  0x1c8c
  304. #define MGAREG_PLNWT  0x1c1c
  305. #define MGAREG_PRIMADDRESS  0x1e58
  306. #define MGAREG_PRIMEND 0x1e5c
  307. #define MGAREG_PRIMPTR 0x1e50
  308. #define MGAREG_SECADDRESS  0x2c40
  309. #define MGAREG_SECEND  0x2c44
  310. #define MGAREG_SETUPADDRESS  0x2cd0
  311. #define MGAREG_SETUPEND  0x2cd4
  312. #define MGAREG_SOFTRAP 0x2c48
  313. #define MGAREG_SRCORG  0x2cb4
  314. #define MGAREG_STATUS  0x1e14
  315. #define MGAREG_STENCIL 0x2cc8
  316. #define MGAREG_STENCILCTL  0x2ccc
  317. #define MGAREG_TDUALSTAGE0  0x2cf8
  318. #define MGAREG_TDUALSTAGE1  0x2cfc
  319. #define MGAREG_TEXBORDERCOL  0x2c5c
  320. #define MGAREG_TEXCTL  0x2c30
  321. #define MGAREG_TEXCTL2 0x2c3c
  322. #define MGAREG_TEXFILTER  0x2c58
  323. #define MGAREG_TEXHEIGHT  0x2c2c
  324. #define MGAREG_TEXORG  0x2c24
  325. #define MGAREG_TEXORG1 0x2ca4
  326. #define MGAREG_TEXORG2 0x2ca8
  327. #define MGAREG_TEXORG3 0x2cac
  328. #define MGAREG_TEXORG4 0x2cb0
  329. #define MGAREG_TEXTRANS  0x2c34
  330. #define MGAREG_TEXTRANSHIGH  0x2c38
  331. #define MGAREG_TEXWIDTH  0x2c28
  332. #define MGAREG_WACCEPTSEQ  0x1dd4
  333. #define MGAREG_WCODEADDR  0x1e6c
  334. #define MGAREG_WFLAG  0x1dc4
  335. #define MGAREG_WFLAG1  0x1de0
  336. #define MGAREG_WFLAGNB 0x1e64
  337. #define MGAREG_WFLAGNB1  0x1e08
  338. #define MGAREG_WGETMSB 0x1dc8
  339. #define MGAREG_WIADDR  0x1dc0
  340. #define MGAREG_WIADDR2 0x1dd8
  341. #define MGAREG_WMISC  0x1e70
  342. #define MGAREG_WVRTXSZ 0x1dcc
  343. #define MGAREG_YBOT  0x1c9c
  344. #define MGAREG_YDST  0x1c90
  345. #define MGAREG_YDSTLEN 0x1c88
  346. #define MGAREG_YDSTORG 0x1c94
  347. #define MGAREG_YTOP  0x1c98
  348. #define MGAREG_ZORG  0x1c0c
  349. /* Warp registers */
  350. #define MGAREG_WR0                              0x2d00
  351. #define MGAREG_WR1                              0x2d04
  352. #define MGAREG_WR2                              0x2d08
  353. #define MGAREG_WR3                              0x2d0c
  354. #define MGAREG_WR4                              0x2d10
  355. #define MGAREG_WR5                              0x2d14
  356. #define MGAREG_WR6                              0x2d18
  357. #define MGAREG_WR7                              0x2d1c
  358. #define MGAREG_WR8                              0x2d20
  359. #define MGAREG_WR9                              0x2d24
  360. #define MGAREG_WR10                             0x2d28
  361. #define MGAREG_WR11                             0x2d2c
  362. #define MGAREG_WR12                             0x2d30
  363. #define MGAREG_WR13                             0x2d34
  364. #define MGAREG_WR14                             0x2d38
  365. #define MGAREG_WR15                             0x2d3c
  366. #define MGAREG_WR16                             0x2d40
  367. #define MGAREG_WR17                             0x2d44
  368. #define MGAREG_WR18                             0x2d48
  369. #define MGAREG_WR19                             0x2d4c
  370. #define MGAREG_WR20                             0x2d50
  371. #define MGAREG_WR21                             0x2d54
  372. #define MGAREG_WR22                             0x2d58
  373. #define MGAREG_WR23                             0x2d5c
  374. #define MGAREG_WR24                             0x2d60
  375. #define MGAREG_WR25                             0x2d64
  376. #define MGAREG_WR26                             0x2d68
  377. #define MGAREG_WR27                             0x2d6c
  378. #define MGAREG_WR28                             0x2d70
  379. #define MGAREG_WR29                             0x2d74
  380. #define MGAREG_WR30                             0x2d78
  381. #define MGAREG_WR31                             0x2d7c
  382. #define MGAREG_WR32                             0x2d80
  383. #define MGAREG_WR33                             0x2d84
  384. #define MGAREG_WR34                             0x2d88
  385. #define MGAREG_WR35                             0x2d8c
  386. #define MGAREG_WR36                             0x2d90
  387. #define MGAREG_WR37                             0x2d94
  388. #define MGAREG_WR38                             0x2d98
  389. #define MGAREG_WR39                             0x2d9c
  390. #define MGAREG_WR40                             0x2da0
  391. #define MGAREG_WR41                             0x2da4
  392. #define MGAREG_WR42                             0x2da8
  393. #define MGAREG_WR43                             0x2dac
  394. #define MGAREG_WR44                             0x2db0
  395. #define MGAREG_WR45                             0x2db4
  396. #define MGAREG_WR46                             0x2db8
  397. #define MGAREG_WR47                             0x2dbc
  398. #define MGAREG_WR48                             0x2dc0
  399. #define MGAREG_WR49                             0x2dc4
  400. #define MGAREG_WR50                             0x2dc8
  401. #define MGAREG_WR51                             0x2dcc
  402. #define MGAREG_WR52                             0x2dd0
  403. #define MGAREG_WR53                             0x2dd4
  404. #define MGAREG_WR54                             0x2dd8
  405. #define MGAREG_WR55                             0x2ddc
  406. #define MGAREG_WR56                             0x2de0
  407. #define MGAREG_WR57                             0x2de4
  408. #define MGAREG_WR58                             0x2de8
  409. #define MGAREG_WR59                             0x2dec
  410. #define MGAREG_WR60                             0x2df0
  411. #define MGAREG_WR61                             0x2df4
  412. #define MGAREG_WR62                             0x2df8
  413. #define MGAREG_WR63                             0x2dfc
  414. #define PDEA_pagpxfer_enable 0x2
  415. #define WIA_wmode_suspend 0x0
  416. #define WIA_wmode_start  0x3
  417. #define WIA_wagp_agp 0x4
  418. #define DC_opcod_line_open  0x0
  419. #define DC_opcod_autoline_open  0x1
  420. #define DC_opcod_line_close  0x2
  421. #define DC_opcod_autoline_close  0x3
  422. #define DC_opcod_trap  0x4
  423. #define DC_opcod_texture_trap  0x6
  424. #define DC_opcod_bitblt  0x8
  425. #define DC_opcod_iload  0x9
  426. #define DC_atype_rpl  0x0
  427. #define DC_atype_rstr  0x10
  428. #define DC_atype_zi  0x30
  429. #define DC_atype_blk  0x40
  430. #define DC_atype_i  0x70
  431. #define DC_linear_xy  0x0
  432. #define DC_linear_linear  0x80
  433. #define DC_zmode_nozcmp  0x0
  434. #define DC_zmode_ze  0x200
  435. #define DC_zmode_zne  0x300
  436. #define DC_zmode_zlt  0x400
  437. #define DC_zmode_zlte  0x500
  438. #define DC_zmode_zgt  0x600
  439. #define DC_zmode_zgte  0x700
  440. #define DC_solid_disable  0x0
  441. #define DC_solid_enable  0x800
  442. #define DC_arzero_disable  0x0
  443. #define DC_arzero_enable  0x1000
  444. #define DC_sgnzero_disable  0x0
  445. #define DC_sgnzero_enable  0x2000
  446. #define DC_shftzero_disable  0x0
  447. #define DC_shftzero_enable  0x4000
  448. #define DC_bop_SHIFT  16
  449. #define DC_trans_SHIFT  20
  450. #define DC_bltmod_bmonolef  0x0
  451. #define DC_bltmod_bmonowf  0x8000000
  452. #define DC_bltmod_bplan  0x2000000
  453. #define DC_bltmod_bfcol  0x4000000
  454. #define DC_bltmod_bu32bgr  0x6000000
  455. #define DC_bltmod_bu32rgb  0xe000000
  456. #define DC_bltmod_bu24bgr  0x16000000
  457. #define DC_bltmod_bu24rgb  0x1e000000
  458. #define DC_pattern_disable  0x0
  459. #define DC_pattern_enable  0x20000000
  460. #define DC_transc_disable  0x0
  461. #define DC_transc_enable  0x40000000
  462. #define DC_clipdis_disable  0x0
  463. #define DC_clipdis_enable  0x80000000
  464. #define SETADD_mode_vertlist                    0x0
  465. #define MGA_CLEAR_CMD (DC_opcod_trap | DC_arzero_enable | 
  466.        DC_sgnzero_enable | DC_shftzero_enable | 
  467.        (0xC << DC_bop_SHIFT) | DC_clipdis_enable | 
  468.        DC_solid_enable | DC_transc_enable)
  469. #define MGA_COPY_CMD (DC_opcod_bitblt | DC_atype_rpl | DC_linear_xy |
  470.       DC_solid_disable | DC_arzero_disable | 
  471.       DC_sgnzero_enable | DC_shftzero_enable | 
  472.       (0xC << DC_bop_SHIFT) | DC_bltmod_bfcol | 
  473.       DC_pattern_disable | DC_transc_disable | 
  474.       DC_clipdis_enable)
  475. #define MGA_FLUSH_CMD (DC_opcod_texture_trap | (0xF << DC_trans_SHIFT) |
  476.        DC_arzero_enable | DC_sgnzero_enable |
  477.        DC_atype_i)
  478. #endif