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

DVD

开发平台:

Unix_Linux

  1. /*
  2.   **********************************************************************
  3.   *
  4.   *     Copyright 1999, 2000 Creative Labs, Inc.
  5.   *
  6.   **********************************************************************
  7.   *
  8.   *     Date                 Author               Summary of changes
  9.   *     ----                 ------               ------------------
  10.   *     October 20, 1999     Andrew de Quincey    Rewrote and extended
  11.   *                          Lucien Murray-Pitts  original incomplete 
  12.   *                                               driver.
  13.   *
  14.   *     April 18, 1999       Andrew Veliath       Original Driver
  15.   *                                               implementation
  16.   *
  17.   **********************************************************************
  18.   *
  19.   *     This program is free software; you can redistribute it and/or
  20.   *     modify it under the terms of the GNU General Public License as
  21.   *     published by the Free Software Foundation; either version 2 of
  22.   *     the License, or (at your option) any later version.
  23.   *
  24.   *     This program is distributed in the hope that it will be useful,
  25.   *     but WITHOUT ANY WARRANTY; without even the implied warranty of
  26.   *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27.   *     GNU General Public License for more details.
  28.   *
  29.   *     You should have received a copy of the GNU General Public
  30.   *     License along with this program; if not, write to the Free
  31.   *     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  32.   *     USA.
  33.   *
  34.   **********************************************************************
  35.   */
  36. /**
  37.  *
  38.  * Driver for the Creative DXR2 Mpeg decoder card
  39.  *
  40.  */
  41. #ifndef __DXR2_H__
  42. #define __DXR2_H__
  43. #include <linux/types.h>
  44. #include <linux/ioctl.h>
  45. #include <linux/tqueue.h>
  46. #include <anp82.h>
  47. #include <bt865.h>
  48. #include <pcm1723.h>
  49. #include <tc6807af.h>
  50. #include <vxp524.h>
  51. #include <zivaDS.h>
  52. // *******************************************************************
  53. // useful defines
  54. // full name of the supported thing
  55. #define DXR2_FULLNAME "Creative DXR2 Mpeg decoder"
  56. // log name of the driver
  57. #define DXR2_LOGNAME "DXR2"
  58. // these control entry to code modifying deferred_queue stuff
  59. #define DXR2_ENTER_CRITICAL(DXR2INST) while(!atomic_dec_and_test(&((DXR2INST)->semaphore))) { atomic_inc(&((DXR2INST)->semaphore)); schedule(); }
  60. #define DXR2_EXIT_CRITICAL(DXR2INST) atomic_inc(&((DXR2INST)->semaphore))
  61. // number of pages in each BM buffer (2^DXR2_PAGE_ORDER)
  62. #define DXR2_PAGE_ORDER 3
  63. #define DXR2_MAJOR 120
  64. #define DXR2_MAX_DEFERRED_COMMANDS 5
  65. // *******************************************************************
  66. // IOCTL codes (this is temporary)
  67. #define DXR2_IOC_MAGIC 'X'
  68. #define DXR2_IOC_GET_REGION_CODE _IO(DXR2_IOC_MAGIC, 0)
  69. #define DXR2_IOC_SET_OUTPUT_TV_FORMAT _IO(DXR2_IOC_MAGIC, 1)
  70. #define DXR2_IOC_SET_SOURCE_VIDEO_FORMAT  _IO(DXR2_IOC_MAGIC, 2)
  71. #define DXR2_IOC_GET_CAPABILITIES _IO(DXR2_IOC_MAGIC, 3)
  72. #define DXR2_IOC_CLEAR_VIDEO _IO(DXR2_IOC_MAGIC, 4)
  73. #define DXR2_IOC_PAUSE _IO(DXR2_IOC_MAGIC, 5)
  74. #define DXR2_IOC_SET_AUDIO_VOLUME _IO(DXR2_IOC_MAGIC, 6)
  75. #define DXR2_IOC_SET_OUTPUT_ASPECT_RATIO _IO(DXR2_IOC_MAGIC, 7)
  76. #define DXR2_IOC_ABORT _IO(DXR2_IOC_MAGIC, 8)
  77. #define DXR2_IOC_STOP _IO(DXR2_IOC_MAGIC, 9)
  78. #define DXR2_IOC_ENABLE_SUBPICTURE _IO(DXR2_IOC_MAGIC, 10)
  79. #define DXR2_IOC_SLOW_FORWARDS _IO(DXR2_IOC_MAGIC, 11)
  80. #define DXR2_IOC_SLOW_BACKWARDS _IO(DXR2_IOC_MAGIC, 12)
  81. #define DXR2_IOC_SET_SOURCE_ASPECT_RATIO _IO(DXR2_IOC_MAGIC, 13)
  82. #define DXR2_IOC_SET_ASPECT_RATIO_MODE _IO(DXR2_IOC_MAGIC, 14)
  83. #define DXR2_IOC_SINGLE_STEP _IO(DXR2_IOC_MAGIC, 15)
  84. #define DXR2_IOC_REVERSE_PLAY _IO(DXR2_IOC_MAGIC, 16)
  85. #define DXR2_IOC_SET_SUBPICTURE_PALETTE _IO(DXR2_IOC_MAGIC, 17)
  86. #define DXR2_IOC_GET_CHALLENGE_KEY _IO(DXR2_IOC_MAGIC, 18)
  87. #define DXR2_IOC_SEND_CHALLENGE_KEY _IO(DXR2_IOC_MAGIC, 19)
  88. #define DXR2_IOC_GET_RESPONSE_KEY _IO(DXR2_IOC_MAGIC, 20)
  89. #define DXR2_IOC_SEND_RESPONSE_KEY _IO(DXR2_IOC_MAGIC, 21)
  90. #define DXR2_IOC_SEND_DISC_KEY _IO(DXR2_IOC_MAGIC, 22)
  91. #define DXR2_IOC_SEND_TITLE_KEY _IO(DXR2_IOC_MAGIC, 23)
  92. #define DXR2_IOC_SET_DECRYPTION_MODE _IO(DXR2_IOC_MAGIC, 24)
  93. #define DXR2_IOC_INIT_ZIVADS _IO(DXR2_IOC_MAGIC, 25)
  94. #define DXR2_IOC_SCAN_MODE _IO(DXR2_IOC_MAGIC, 26)
  95. #define DXR2_IOC_SET_MACROVISION_MODE _IO(DXR2_IOC_MAGIC, 27)
  96. #define DXR2_IOC_RESET  _IO(DXR2_IOC_MAGIC, 28)
  97. #define DXR2_IOC_SET_BITSTREAM_TYPE  _IO(DXR2_IOC_MAGIC, 29)
  98. #define DXR2_IOC_PLAY  _IO(DXR2_IOC_MAGIC, 30)
  99. #define DXR2_IOC_GET_STC       _IO(DXR2_IOC_MAGIC, 31)
  100. #define DXR2_IOC_SET_AUDIO_SAMPLE_FREQUENCY  _IO(DXR2_IOC_MAGIC, 32)
  101. #define DXR2_IOC_SET_AUDIO_DATA_WIDTH _IO(DXR2_IOC_MAGIC, 33)
  102. #define DXR2_IOC_IEC958_OUTPUT_MODE _IO(DXR2_IOC_MAGIC, 34)
  103. #define DXR2_IOC_SET_AC3_MODE _IO(DXR2_IOC_MAGIC, 35)
  104. #define DXR2_IOC_SELECT_AC3_VOICE _IO(DXR2_IOC_MAGIC, 36)
  105. #define DXR2_IOC_AUDIO_MUTE _IO(DXR2_IOC_MAGIC, 37)
  106. #define DXR2_IOC_SET_STEREO_MODE _IO(DXR2_IOC_MAGIC, 38)
  107. #define DXR2_IOC_SELECT_STREAM _IO(DXR2_IOC_MAGIC, 39)
  108. #define DXR2_IOC_HIGHLIGHT _IO(DXR2_IOC_MAGIC, 40)
  109.     
  110. // *******************************************************************
  111. // stuff for IOCTLS
  112. // TV formats
  113. #define DXR2_TVFORMAT_NTSC 0
  114. #define DXR2_TVFORMAT_PAL  1
  115. // video frequencies
  116. #define DXR2_SRC_VIDEO_FREQ_30 0
  117. #define DXR2_SRC_VIDEO_FREQ_25 1
  118. // aspect ratios
  119. #define DXR2_ASPECTRATIO_4_3 0
  120. #define DXR2_ASPECTRATIO_16_9 1
  121. // subpicture modes
  122. #define DXR2_SUBPICTURE_OFF 0
  123. #define DXR2_SUBPICTURE_ON 1
  124. // rates for slow forwards & backwards
  125. #define DXR2_SLOWRATE_2x 0
  126. #define DXR2_SLOWRATE_3x 1
  127. #define DXR2_SLOWRATE_4x 2
  128. #define DXR2_SLOWRATE_5x 3
  129. #define DXR2_SLOWRATE_6x 4
  130. // CSS decryption modes supported
  131. #define DXR2_CSSDECRMODE_OFF 0
  132. #define DXR2_CSSDECRMODE_ON  1
  133. // play modes
  134. #define DXR2_PLAYMODE_STOPPED         0
  135. #define DXR2_PLAYMODE_PAUSED          1
  136. #define DXR2_PLAYMODE_SLOWFORWARDS    2
  137. #define DXR2_PLAYMODE_SLOWBACKWARDS   3
  138. #define DXR2_PLAYMODE_SINGLESTEP      4
  139. #define DXR2_PLAYMODE_PLAY            5
  140. #define DXR2_PLAYMODE_REVERSEPLAY     6
  141. #define DXR2_PLAYMODE_SCAN            7
  142. // for operation queue
  143. #define DXR2_QUEUE_PAUSED             0
  144. #define DXR2_QUEUE_SETVOLUME          1
  145. #define DXR2_QUEUE_ENABLESUBPICTURE   2
  146. #define DXR2_QUEUE_SCANMODE           3
  147. #define DXR2_QUEUE_SELECTSTREAM       4
  148. #define DXR2_QUEUE_SETMUTESTATUS      5
  149. #define DXR2_QUEUE_HIGHLIGHT          6
  150. // aspect ratio modes
  151. #define DXR2_ASPECTRATIOMODE_NORMAL    0
  152. #define DXR2_ASPECTRATIOMODE_PAN_SCAN  1
  153. #define DXR2_ASPECTRATIOMODE_LETTERBOX 2
  154. // macrovision modes
  155. #define DXR2_MACROVISION_OFF 0
  156. #define DXR2_MACROVISION_1   1
  157. #define DXR2_MACROVISION_2   2
  158. #define DXR2_MACROVISION_3   3
  159. #define DXR2_MACROVISION_4   4
  160. // bitstreams possibly present in files
  161. #define DXR2_STREAM_VIDEO       0
  162. #define DXR2_STREAM_SUBPICTURE  1
  163. #define DXR2_STREAM_AUDIO_AC3   2
  164. #define DXR2_STREAM_AUDIO_MPEG  3
  165. #define DXR2_STREAM_AUDIO_LPCM  4
  166. #define DXR2_STREAM_AUDIO_5 5
  167. // bitstream types
  168. #define DXR2_BITSTREAM_TYPE_MPEG_VOB       0
  169. #define DXR2_BITSTREAM_TYPE_CDROM_VCD      1
  170. #define DXR2_BITSTREAM_TYPE_MPEG_VCD       2
  171. #define DXR2_BITSTREAM_TYPE_CDDA           3
  172. #define DXR2_BITSTREAM_TYPE_4              4
  173. // frequency of output audio data (to the pcm1723)
  174. #define DXR2_AUDIO_FREQ_441    0
  175. #define DXR2_AUDIO_FREQ_48     1
  176. #define DXR2_AUDIO_FREQ_96     2
  177. #define DXR2_AUDIO_FREQ_2205   3
  178. #define DXR2_AUDIO_FREQ_32     4
  179. // widths of output audio data (to the pcm1723)
  180. #define DXR2_AUDIO_WIDTH_16    0
  181. #define DXR2_AUDIO_WIDTH_20    1
  182. #define DXR2_AUDIO_WIDTH_24    2
  183. // play types
  184. #define DXR2_PLAYTYPE_NORMAL 0
  185. #define DXR2_PLAYTYPE_STILLSTOP 1
  186. // iec-958 output types
  187. #define DXR2_IEC958_DECODED    0
  188. #define DXR2_IEC958_ENCODED    1
  189. // AC3 modes
  190. #define DXR2_AC3MODE_LR_STEREO          0
  191. #define DXR2_AC3MODE_LR_STEREO_PROLOGIC 1
  192. #define DXR2_AC3MODE_LR_MONOR           2
  193. // AC3 voice configuration (for karaoke)
  194. #define DXR2_AC3VOICE_NONE        0
  195. #define DXR2_AC3VOICE_V1V2        1
  196. // highlight actions
  197. #define DXR2_BUTTONACTION_SELECT    0
  198. #define DXR2_BUTTONACTION_UNHIGHLIGHT 1
  199. #define DXR2_BUTTONACTION_ACTIVATE 2
  200. #define DXR2_BUTTONACTION_ACTIVATE_SELECTED 3
  201. #define DXR2_BUTTONACTION_4 4
  202. #define DXR2_BUTTONACTION_5 5
  203. #define DXR2_BUTTONACTION_6 6
  204. #define DXR2_BUTTONACTION_7 7
  205. #define DXR2_BUTTONACTION_8 8
  206. // special buttons
  207. #define DXR2_BUTTON_NONE    0
  208. #define DXR2_BUTTON_UP     64
  209. #define DXR2_BUTTON_DOWN   65
  210. #define DXR2_BUTTON_LEFT   66
  211. #define DXR2_BUTTON_RIGHT  67
  212. // mute modes
  213. #define DXR2_AUDIO_MUTE_ON     0
  214. #define DXR2_AUDIO_MUTE_OFF    1
  215. // stereo mode
  216. #define DXR2_AUDIO_STEREO_NORMAL  0
  217. #define DXR2_AUDIO_STEREO_MONOL   1
  218. #define DXR2_AUDIO_STEREO_MONOR   2
  219. #define DXR2_AUDIO_STEREO_REVERSE 3
  220. // *******************************************************************
  221. // Structures
  222. typedef struct {
  223.   // driver instances
  224.   anp82_t* anp82Instance;
  225.   bt865_t* bt865Instance;
  226.   pcm1723_t* pcm1723Instance;
  227.   tc6807af_t* tc6807afInstance;
  228.   zivaDS_t* zivaDSInstance;
  229.   vxp524_t* vxp524Instance;
  230.   // base address values used for talking to some of the hardware
  231.   unsigned long tc6807afBase;
  232.   unsigned long zivaDSBase;
  233.   unsigned long vxp524Base;
  234.   unsigned long asicBase;
  235.   // current value of the ASIC, since it's read only
  236.   int asicValue;
  237.   // BM buffer stuff
  238.   int bmBuffer;
  239.   int writeBuffer;
  240.   unsigned long buffer[2];
  241.   int bufferSize[2];
  242.   int bufferCount[2];
  243.   // is the HLI int enabled
  244.   int hliFlag;
  245.   // has the ziva been initialised
  246.   int zivaDSInitialised;
  247.   // semaphore so we don't start two BMs/process the deferred queue at the same time
  248.   atomic_t semaphore;
  249.   // wait queue
  250.   struct wait_queue* waitQueue;
  251.   
  252.   // deferred commands
  253.   int deferredCount;
  254.   int deferredQueue[DXR2_MAX_DEFERRED_COMMANDS][4];
  255.   // to hold data to transfer
  256.   char* userBuffer;            // user supplied buffer
  257.   int userBytesTransferred;      // number of bytes already transferred
  258.   int userBufferSize;            // total amount of data in buffer
  259.   // misc stuff we need to remember
  260.   int currentOutputTvFormat;
  261.   int currentZivaAudioDACMode;
  262.   int currentSourceVideoFrequency;
  263.   int currentSourceVideoXRes;
  264.   int currentSourceVideoYRes;
  265.   int currentPlayMode;
  266.   int currentAudioVolume;
  267.   int currentOutputAspectRatio;
  268.   int currentSlowRate;
  269.   int currentAspectRatioMode;
  270.   int currentScanOp;
  271.   int currentScanParam;
  272.   int currentBitstreamType;
  273.   int currentVideoStream;
  274.   int currentSubPictureStream;
  275.   int currentAudioStream;
  276.   int currentAudioStreamType;
  277.   int currentAudioMuteStatus;
  278.   int currentAudioSampleFrequency;
  279.   int currentAudioInputWidth;
  280. } dxr2_t;
  281. typedef struct {
  282.   int arg;
  283. } dxr2_oneArg_t;
  284. typedef struct {
  285.   int arg1;
  286.   int arg2;
  287. } dxr2_twoArg_t;
  288. typedef struct {
  289.   int arg1;
  290.   int arg2;
  291.   int arg3;
  292. } dxr2_threeArg_t;
  293. typedef struct {
  294.   int uCodeLength;
  295.   char uCode[0]; // allocate this structure to whatever length you need...
  296. } dxr2_uCode_t;
  297. typedef struct {
  298.   int entries[16];
  299. } dxr2_palette_t;
  300. typedef struct {
  301.   
  302.   char key[10];
  303. } dxr2_challengeKey_t;
  304. typedef struct {
  305.   
  306.   char key[5];
  307. } dxr2_responseKey_t;
  308. typedef struct {
  309.   
  310.   char key[0x800];
  311. } dxr2_discKey_t;
  312. typedef struct {
  313.   
  314.   char key[6];
  315. } dxr2_titleKey_t;
  316. // *******************************************************************
  317. // function declarations
  318. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  319. // Driver maintenance functions
  320. /**
  321.  *
  322.  * Create new DXR2 device
  323.  *
  324.  */
  325. extern dxr2_t* dxr2_new();
  326.      
  327. /**
  328.  *
  329.  * Destroy a dxr2 device (BURNY BURNY!!!!)
  330.  *
  331.  * @param instance DXR2 instance to use
  332.  *
  333.  */
  334. extern void dxr2_free(dxr2_t* instance);
  335. #endif