mgavideo.h
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:8k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.  * Video Capture Driver ( Video for Linux 1/2 )
  3.  * for the Matrox Marvel G200 and Rainbow Runner-G series
  4.  *
  5.  * This module is an interface to the G100 and G200 video extension
  6.  * registers.  
  7.  *
  8.  * Copyright (C) 1999  Ryan Drake <stiletto@mediaone.net>
  9.  *
  10.  * This program is free software; you can redistribute it and/or
  11.  * modify it under the terms of the GNU General Public License
  12.  * as published by the Free Software Foundation; either version 2
  13.  * of the License, or (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  23.  */
  24. #ifndef MGAVIDEO_H
  25. #define MGAVIDEO_H
  26. #ifdef __KERNEL__
  27. #include <linux/i2c.h>
  28. /* video registers */
  29. #define VINCTL0         0x3e00
  30. #define VINCTL1         0x3e04
  31. #define VBIADDR0        0x3e08
  32. #define VBIADDR1        0x3e0c
  33. #define VINADDR0        0x3e10
  34. #define VINADDR1        0x3e14
  35. #define VINNEXTWIN      0x3e18
  36. #define VINCTL          0x3e1c
  37. #define VSTATUS         0x3e30
  38. #define VICLEAR         0x3e34
  39. #define VIEN            0x3e38
  40. /* CODEC registers */
  41. #define CODECCTL        0x3e40
  42. #define CODECMISCCTL 0x3e43
  43. #define CODECADDR       0x3e44
  44. #define CODECHOSTPTR    0x3e48
  45. #define CODECHARDPTR    0x3e4c
  46. #define CODECLCODE      0x3e50
  47. #define RST             0x1e40  /* not a codec register, but it helps though... */
  48. /* Backend scaler registers */
  49. #define BESA1ORG        0x3d00
  50. #define BESA2ORG        0x3d04
  51. #define BESB1ORG        0x3d08
  52. #define BESB2ORG        0x3d0c
  53. #define BESA1CORG       0x3d10
  54. #define BESA2CORG       0x3d14
  55. #define BESB1CORG       0x3d18
  56. #define BESB2CORG       0x3d1c
  57. #define BESCTL          0x3d20
  58. #define BESPITCH        0x3d24
  59. #define BESHCOORD       0x3d28
  60. #define BESVCOORD       0x3d2c
  61. #define BESHISCAL       0x3d30
  62. #define BESVISCAL       0x3d34
  63. #define BESHSRCST       0x3d38
  64. #define BESHSRCEND      0x3d3c
  65. #define BESV1WGHT       0x3d48
  66. #define BESV2WGHT       0x3d4c
  67. #define BESHSRCLST      0x3d50
  68. #define BESV1SRCLST     0x3d54
  69. #define BESV2SRCLST     0x3d58
  70. #define BESGLOBCTL      0x3dc0
  71. #define BESSTATUS       0x3dc4
  72. #define VINCTLx_MASK    0x00000fff
  73. #define VBIADDRx_MASK   0x00fffE00
  74. #define VINADDRx_MASK   0x00fffE00
  75. /* mga video status */
  76. #define VI_IVSYNC    0x0001 /* input vsync interrupt */
  77. #define VI_CMDCMPL   0x0002 /* command complete interrupt */
  78. #define VI_BLVL      0x0004 /* buffer level interrupt */
  79. #define VI_EOI       0x0008 /* codec end of image interrupt */
  80. #define VS_FIELD     0x0100 /* field 0 or 1 detected */
  81. #define VS_VIDEO     0x0200 /* indicates video was captured */
  82. #define VS_RAWVBI    0x0400 /* indicates raw vbi was captured */
  83. #define VS_SLICEDVBI 0x0800 /* indicates sliced vbi was captured */
  84. #define VI_IVSYNC    0x0001 /* input vsync interrupt */
  85. #define VI_CMDCMPL   0x0002 /* command complete interrupt */
  86. #define VI_BLVL      0x0004 /* buffer level interrupt */
  87. #define VI_EOI       0x0008 /* codec end of image interrupt */
  88. #define VS_STALLED   0x1000 /* codec stalled after transfer stopped */
  89. #define VC_CODECEN 0x0001 /* enable codec interface */
  90. #define VC_MODE 0x0002 /* codec mode VMI/I33 */
  91. #define VC_TRIG 0x0004 /* codec command trigger */
  92. #define VC_DATAIN 0x0008 /* Decompress/Compress */
  93. #define VC_VMIMODE 0x0010 /* VMI mode A/B */
  94. #define VC_STOP 0x0020 /* Stop after current field */
  95. #define VC_TRANSEN 0x0040 /* enable transfer to/from frame buffer */
  96. #define VIN_OFF      0x0
  97. #define VIN_ON       0x1
  98. #define VBI_OFF      0x0
  99. #define VBI_RAW      0x2
  100. #define VBI_SLICED   0x6
  101. /* video attributes - these should probably be configurable on the fly
  102.  *                    so users with different desktop sizes can keep
  103.  *                    captured data off the desktop
  104.  */
  105. #define _VINWID   704
  106. #define _VINHGT   _VINHGT_NTSC
  107. #define _VINHGT_NTSC   240
  108. #define _VINHGT_PAL    290
  109. #define _VIN_WINDOW (704 * 291 * 2)
  110. #define _VBI_WINDOW (704 * 64 * 2)
  111. #define _VIN_FIELD_EVEN 1
  112. #define _VIN_FIELD_ODD 2
  113. #define _VIN_FIELD_BOTH 4
  114. /****************************************************************************
  115. * mga_dev : represents one mga board.  since we can be dealing with multiple
  116. *           boards, all entry points to this module must specify a board
  117. ****************************************************************************/
  118. struct codec {
  119. int codec_id;
  120. int memory_size;
  121. void *private;
  122. int state;
  123. int (*codec_read_register)(struct codec *codec, void *buffer,int location, int size);
  124. int (*codec_write_register)(struct codec *codec, void *buffer,int location, int size);
  125. int (*codec_read_memory)(struct codec *codec, void *buffer,int location, int size);
  126. int (*codec_write_memory)(struct codec *codec, void *buffer,int location, int size);
  127. int (*codec_reset)(struct codec *codec);
  128. int (*codec_start)(struct codec *codec);
  129. };
  130. #define ZR36060_ID 1
  131. struct mga_dev
  132. {
  133.         struct i2c_bus i2c;
  134.         u8* fb;
  135.         u8* ctrl;
  136.         int inuse;
  137.         char name[16];
  138.         /* Device info from pci */
  139.         u32 device;
  140.         int irq;  
  141.         /* caps */
  142.         int hasaudio;
  143.         int hastuner;
  144.         int hasdecoder;
  145.         /* status of the video grabber */
  146.         u32 status;
  147.         u32 locked;
  148. u32 field_wanted; /* even, odd, interlaced */
  149.         /* registered bottom half of isr */
  150.         struct tq_struct tqnode_dpc;
  151.         int req_even;
  152.         int req_odd;
  153.         int irq_status;
  154. u32 vin_field;
  155.         /* address for even and odd frames */
  156.         u32 vin_addr0;
  157.         u32 vbi_addr0;
  158.         u32 vin_addr1;
  159.         u32 vbi_addr1;
  160. u32 vinpitch;
  161. u8 *interface_base;
  162. u8 *command_base;
  163. u8 *read_base;
  164. u32 host_interface_base;
  165. u32 codec_offset;
  166. u32 codecctl_shadow;
  167. u32 codecmisc_shadow;
  168.         /* codec interface (dbarth: to be deleted) */
  169.         u32 codecaddr;
  170.         u32 codeccmd;
  171.         u32 codecdata;
  172. #ifdef BYTEORDERHACK
  173. int little_endian_codec; /* codec byte order */
  174. #endif
  175.         /* statistics */
  176.         int grabbed;
  177. #ifdef NEVER
  178. struct zr36060 zr;
  179. #endif
  180. struct codec zr36060;
  181. struct codec zr36700;
  182. };
  183. struct mga_dev;
  184. /* component device control */
  185. void mgavideo_tuner( struct mga_dev* mga, unsigned int cmd, void* arg );
  186. void mgavideo_audio( struct mga_dev* mga, unsigned int cmd, void* arg );
  187. void mgavideo_decoder( struct mga_dev* mga, unsigned int cmd, void* arg );
  188. void mgavideo_zr36060_reset(struct mga_dev* mga);
  189. #define MGAVIDEO_HAS_TUNER   1
  190. #define MGAVIDEO_HAS_AUDIO   2
  191. #define MGAVIDEO_HAS_DECODER 4
  192. int mgavideo_querycaps( struct mga_dev* mga );
  193. /* get pointer to currently grabbed video */
  194. u8* mgavideo_lock_video( struct mga_dev* mga );
  195. void mgavideo_unlock_video( struct mga_dev* mga );
  196. /* video interrupt control */
  197. void mgavideo_ivsync_enable( struct mga_dev* mga, int en );
  198. void mgavideo_register_bh( struct mga_dev* mga, int req_even, int req_odd,
  199.                            void(*routine)(void*), void* data );
  200. void  mgavideo_set_dims(struct mga_dev *mga, int x, int y);
  201. /* video preview */
  202. void* mgavideo_get_base( struct mga_dev* mga );
  203. void mgavideo_set_window( struct mga_dev* mga, int x, int y, int w, int h );
  204. void mgavideo_set_colorkey( struct mga_dev* mga, int r, int g, int b );
  205. void mgavideo_set_overlay( struct mga_dev* mga );
  206. void mgavideo_preview_enable( struct mga_dev* mga, int en );
  207.                                 
  208. /* find next mga adapter */
  209. struct mga_dev* mgavideo_get( void );
  210. struct mga_dev* mgavideo_get_codec( void );
  211. /* release a mga adapter that is not needed anymore */
  212. void mgavideo_release( struct mga_dev* mga );
  213. /* Codec Interface */
  214. void codec_reset(struct mga_dev *mga);
  215. void codec_exec(struct mga_dev *mga);
  216. void codec_miscctl(struct mga_dev *mga, u8 data1, u8 data2);
  217. int  codec_miscctl_func1(struct mga_dev *mga, u8 param);
  218. int  codec_I34_reset(struct mga_dev *mga);
  219. void codec_read(struct mga_dev *mga, u8 reg);
  220. void codec_write(struct mga_dev *mga, u8 reg, u16 data);
  221. u16  codec_getw(struct mga_dev *mga);
  222. void dump_codec_cmdbuffer(struct mga_dev *mga);
  223. void mga_extrst(struct mga_dev *mga, u8 activate);
  224. #endif /* __KERNEL__ */
  225. #endif /* MGAVIDEO_H */