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

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 Auravision VxP524 video processor
  39.  * Include file
  40.  *
  41.  */
  42. #ifndef __VXP524_H__
  43. #define __VXP524_H__
  44. #include <asm/atomic.h>
  45. // *******************************************************************
  46. // useful defines
  47. // full name of the supported thing
  48. #define VXP524_FULLNAME                 "Auravision VxP524"
  49. // log name of the driver
  50. #define VXP524_LOGNAME "VXP524"
  51. // memory range used by the chip
  52. #define VXP524_MEMRANGE 1024ul * 1024ul
  53. // *******************************************************************
  54. // register names
  55. #define VXP524_PCI_DMA_ADDR0 0x00
  56. #define VXP524_PCI_DMA_ADDR1 0x01
  57. #define VXP524_PCI_DMA_ADDR2 0x02
  58. #define VXP524_PCI_DMA_ADDR3 0x03
  59. #define VXP524_PCI_DMA_CNT0 0x04
  60. #define VXP524_PCI_DMA_CNT1 0x05
  61. #define VXP524_PCI_DMA_CNT2 0x06
  62. #define VXP524_PCI_BURST_SIZE 0x07
  63. #define VXP524_PCI_FIFO_THRESH 0x08
  64. #define VXP524_PCI_GLOBAL_REGS 0x09
  65. #define VXP524_REFRESH_CNT 0x12
  66. #define VXP524_REFRESH_PENDING 0x13
  67. #define VXP524_DRAM_CTRL 0x17
  68. #define VXP524_CLK_MODE 0x1f
  69. #define VXP524_CLK_FREQ_LOW 0x27
  70. #define VXP524_CLK_FREQ_HIGH 0x28
  71. #define VXP524_VIO_HS_WIDTH 0x29
  72. #define VXP524_VIO_VS_HEIGHT 0x2a
  73. #define VXP524_VIO_WIDTH_A 0x2b
  74. #define VXP524_VIO_HEIGHT_A 0x2c
  75. #define VXP524_VIO_SYNC_B 0x2d
  76. #define VXP524_CODEC_CFG 0x2f
  77. #define VXP524_I2C 0x34
  78. #define VXP524_INPUT_CFG 0x35
  79. #define VXP524_PLL_CTRL_A 0x36
  80. #define VXP524_PLL_CTRL_B 0x37
  81. #define VXP524_INPUT_CFG_A 0x38
  82. #define VXP524_INPUT_CFG_B 0x39
  83. #define VXP524_PCI_SRC_WIDTH_A 0x3a
  84. #define VXP524_PCI_SRC_WIDTH_B 0x3b
  85. #define VXP524_PCI_SRC_HEIGHT_A 0x3c
  86. #define VXP524_PCI_SRC_HEIGHT_B 0x3d
  87. #define VXP524_HORZ_CROP_LEFT_A 0x40
  88. #define VXP524_HORZ_CROP_LEFT_B 0x41
  89. #define VXP524_HORZ_CROP_RIGHT_A 0x44
  90. #define VXP524_HORZ_CROP_RIGHT_B 0x45
  91. #define VXP524_VERT_CROP_TOP_A 0x48
  92. #define VXP524_VERT_CROP_TOP_B 0x49
  93. #define VXP524_VERT_CROP_BOTTOM_A 0x4c
  94. #define VXP524_VERT_CROP_BOTTOM_B 0x4d
  95. #define VXP524_FILTER_CTRL 0x50
  96. #define VXP524_HORZ_SCALE_CTRL_A 0x54
  97. #define VXP524_HORZ_SCALE_CTRL_B 0x55
  98. #define VXP524_VERT_SCALE_CTRL_A 0x5b
  99. #define VXP524_VERT_SCALE_CTRL_B 0x5c
  100. #define VXP524_PICTURE_CTRL_ADDR 0x5d
  101. #define VXP524_PICTURE_CTRL_LUMA 0x5e
  102. #define VXP524_PICTURE_CTRL_CHROMA 0x5f
  103. #define VXP524_INTR_CTRL 0x60
  104. #define VXP524_INTR_STATUS 0x61
  105. #define VXP524_IN_REQ_LEVEL 0x67
  106. #define VXP524_VIN_MULTIBUF_DEPTH_A 0x68
  107. #define VXP524_TIME_SCALE_CTRL 0x6d
  108. #define VXP524_VIDEO_LAYOUT_CTRL 0x73
  109. #define VXP524_INPUT_FIFO 0x78
  110. #define VXP524_CAPTURE_CTRL 0x80
  111. #define VXP524_CAPTURE_VP_WIDTH_A 0x84
  112. #define VXP524_CAPTURE_VP_WIDTH_B 0x85
  113. #define VXP524_CAPTURE_VP_HEIGHT_A 0x86
  114. #define VXP524_CAPTURE_VP_HEIGHT_B 0x87
  115. #define VXP524_CAPTURE_MULTIBUF_DEPTH 0x8a
  116. #define VXP524_OFIFO_LTHRESH_CTRL 0x8f
  117. #define VXP524_OFIFO_HTHRESH_CTRL 0x90
  118. #define VXP524_OREQ_ACTIVE_LEVEL 0x91
  119. #define VXP524_DISP_CTRL 0x92
  120. #define VXP524_MULTIBUF_DEPTH_CTRL 0x93
  121. #define VXP524_VGA_CTRL_A 0x94
  122. #define VXP524_VGA_CTRL_B 0x95
  123. #define VXP524_OUTPUT_PROC_CTRL_A 0x96
  124. #define VXP524_OUTPUT_PROC_CTRL_B 0x97
  125. #define VXP524_OUTPUT_PROC_CTRL_C 0x98
  126. #define VXP524_CHROMA_KEY_CTRL 0x9b
  127. #define VXP524_KEY_COLOR 0x9c
  128. #define VXP524_KEY_COLOR_HI 0x9d
  129. #define VXP524_KEY_COLOR_HI2 0x9e
  130. #define VXP524_VIDEON_CTRL 0x9f
  131. #define VXP524_VP_START_ADDR_A 0xa0
  132. #define VXP524_VP_WIDTH_A 0xa4
  133. #define VXP524_VP_HEIGHT_A 0xa6
  134. #define VXP524_VP_ADDR_WH_B 0xa7
  135. #define VXP524_VP_DORG_TOP_A 0xa8
  136. #define VXP524_VP_DORG_LEFT_A 0xaa
  137. #define VXP524_VP_DORG_TOP_LEFT_B 0xab
  138. #define VXP524_DWIN_LEFT_A 0xb0
  139. #define VXP524_DWIN_RIGHT_A 0xb4
  140. #define VXP524_DWIN_LEFT_RIGHT_B 0xb5
  141. #define VXP524_DWIN_TOP_A 0xb8
  142. #define VXP524_DWIN_BOTTOM_A 0xbc
  143. #define VXP524_DWIN_TOP_BOTTOM_B 0xbd
  144. #define VXP524_OVERT_ZOOM_CTRL_A 0xc0
  145. #define VXP524_OVERT_ZOOM_CTRL_B 0xc1
  146. #define VXP524_OHORZ_ZOOM_CTRL_A 0xc4
  147. #define VXP524_OHORZ_ZOOM_CTRL_B 0xc5
  148. #define VXP524_VERT_COORD_OFFSET 0xc6
  149. #define VXP524_HORZ_COORD_OFFSET 0xc7
  150. #define VXP524_GPO_DATA1 0xcc
  151. #define VXP524_VGA_CTRL_C 0xcd
  152. #define VXP524_VGA_CTRL_D 0xce
  153. #define VXP524_MAX_HCOUNT1 0xd0
  154. #define VXP524_MAX_HCOUNT2 0xd1
  155. #define VXP524_INTR_CTRL2 0xd2
  156. #define VXP524_INTR_STATUS2 0xd3
  157. #define VXP524_VGA_DB0 0xd5
  158. #define VXP524_VGA_DB1 0xd6
  159. #define VXP524_VGA_DB2 0xd7
  160. #define VXP524_CHROMA_KEY_RED_LOW 0xd8
  161. #define VXP524_CHROMA_KEY_RED_HIGH 0xd9
  162. #define VXP524_CHROMA_KEY_GREEN_LOW 0xda
  163. #define VXP524_CHROMA_KEY_GREEN_HIGH 0xdb
  164. #define VXP524_CHROMA_KEY_BLUE_LOW 0xdc
  165. #define VXP524_CHROMA_KEY_BLUE_HIGH 0xdd
  166. // *******************************************************************
  167. // Structures
  168. typedef struct _vxp524_ops_t vxp524_ops_t;
  169. typedef struct _vxp524_t vxp524_t;
  170. // generic driver structure
  171. struct _vxp524_t {
  172.   struct pci_dev* pci_dev;
  173.   vxp524_ops_t* ops;
  174.   void* data;
  175.   unsigned long base;
  176.   unsigned long mem;
  177.   unsigned long memlen;
  178.   
  179.   // is BM in use?
  180.   int bmInUse;
  181. };
  182. // lowlevel access operations
  183. struct _vxp524_ops_t {
  184.   char name[32];
  185. };
  186. // *******************************************************************
  187. // function declarations
  188. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  189. // Driver maintenance functions
  190. /**
  191.  *
  192.  * Create new vxp524 driver instance
  193.  *
  194.  * @param pci_dev PCI device structure
  195.  * @param ops Lowlevel operations to talk to chip
  196.  * @param data Any extra data for said functions
  197.  *
  198.  */
  199. extern vxp524_t* vxp524_new(vxp524_ops_t *ops, void *data);
  200. /**
  201.  *
  202.  * Destroy a vxp524 driver instance
  203.  *
  204.  * @param instance The instance to destroy
  205.  *
  206.  */
  207. extern void vxp524_free(vxp524_t* instance);
  208. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  209. // High level convenience functions
  210. /**
  211.  *
  212.  * Initlialises the VXP524
  213.  *
  214.  * @param instance instance to use
  215.  *
  216.  * @return 0 on success, <0 on error
  217.  *
  218.  */
  219. extern int vxp524_init(vxp524_t* instance);
  220. /**
  221.  *
  222.  * Enable memory mapped access & IRQ for the VxP524
  223.  *
  224.  * @param instance instance to do this for
  225.  * 
  226.  */
  227. extern void vxp524_enable_mem(vxp524_t* instance);
  228. /**
  229.  *
  230.  * Disable memory mapped access & IRQ for the VxP524
  231.  *
  232.  * @param instance instance to do this for
  233.  * 
  234.  */
  235. extern void vxp524_disable_mem(vxp524_t* instance);
  236. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  237. // Low level i2s functions
  238. /**
  239.  *
  240.  * Initialise the i2s bus
  241.  *
  242.  * @param instance VxP524 instance to use
  243.  */
  244. extern void vxp524_i2s_init(vxp524_t* instance);
  245. /**
  246.  * 
  247.  * Close the i2s bus after use
  248.  *
  249.  * @param instance VxP524 instance to use
  250.  *
  251.  */
  252. extern void vxp524_i2s_close(vxp524_t* instance);
  253. /**
  254.  *
  255.  * Set the DATA line on the i2s bus
  256.  *
  257.  * @param instance VxP524 instance to use
  258.  *
  259.  */
  260. extern void vxp524_i2s_set_sda(vxp524_t* instance);
  261. /**
  262.  *
  263.  * Clear the DATA line on the i2s bus
  264.  *
  265.  * @param instance VxP524 instance to use
  266.  *
  267.  */
  268. extern void vxp524_i2s_clear_sda(vxp524_t* instance);
  269. /**
  270.  *
  271.  * Tristate the DATA line on the i2s bus
  272.  *
  273.  * @param instance VxP524 instance to use
  274.  *
  275.  */
  276. extern void vxp524_i2s_tri_sda(vxp524_t* instance);
  277. /**
  278.  *
  279.  * Un-Tristate the DATA line on the i2s bus
  280.  *
  281.  * @param instance VxP524 instance to use
  282.  *
  283.  */
  284. extern void vxp524_i2s_untri_sda(vxp524_t* instance);
  285. /**
  286.  *
  287.  * Get the current value of the DATA line on the i2s bus
  288.  *
  289.  * @param instance the VxP524 instance to use
  290.  *
  291.  */
  292. extern int vxp524_i2s_get_sda(vxp524_t* instance);
  293. /**
  294.  *
  295.  * Set the CLOCK line on the i2s bus
  296.  *
  297.  * @param instance VxP524 instance to use
  298.  *
  299.  */
  300. extern void vxp524_i2s_set_scl(vxp524_t* instance);
  301. /**
  302.  *
  303.  * Clear the clock line on the i2s bus
  304.  *
  305.  * @param instance the VxP524 instance to use
  306.  *
  307.  */
  308. extern void vxp524_i2s_clear_scl(vxp524_t* instance);
  309. /**
  310.  *
  311.  * Reads the DATA line until it becomes set. Max. count reads
  312.  *
  313.  * @param instance the VxP524 instance to use
  314.  * @param count Maximum number of reads
  315.  *
  316.  * @return 0 on success, -ETIMEDOUT if the DATA line never became set
  317.  *
  318.  */
  319. extern int vxp524_i2s_wait_till_sda_set(vxp524_t* instance, int count);
  320. /**
  321.  *
  322.  * Reads the CLOCK line until it becomes set. Max. count reads
  323.  *
  324.  * @param instance the VxP524 instance to use
  325.  * @param count Maximum number of reads
  326.  *
  327.  * @return 0 on success, -ETIMEDOUT if the CLOCK line never became set
  328.  *
  329.  */
  330. extern int vxp524_i2s_wait_till_scl_set(vxp524_t* instance, int count);
  331. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  332. // i2c functions
  333. /**
  334.  *
  335.  * Read a value from a register on a device connected to the i2c bus
  336.  *
  337.  * @param instance VXP524 instance to use
  338.  * @param devId Device id to read from
  339.  * @param reg Register on the device to read from
  340.  *
  341.  * @return Value on success (>=0), or <0 on error
  342.  *
  343.  */
  344. extern int vxp524_i2c_read_reg(vxp524_t* instance, int devId, int reg);
  345. /**
  346.  *
  347.  * Write a value to a register on a device connected to the i2c bus
  348.  *
  349.  * @param instance VXP524 instance to use
  350.  * @param devId Device id to write to
  351.  * @param reg Register on the device to write to
  352.  * @param val Value to write
  353.  *
  354.  * @return 0 on success, or <0 on error
  355.  *
  356.  */
  357. extern int vxp524_i2c_write_reg(vxp524_t* instance, int devId, int reg, int val);
  358. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  359. // vxp524 Bus mastering routines
  360. /**
  361.  *
  362.  * Start bus master TX to VXP524
  363.  *
  364.  * @param instance VXP524 instance to use
  365.  * @param buffer Buffer start address (this is the BUS ADDRESS of it BTW)
  366.  * @param count Number of bytes to TX
  367.  * @param irqEndFlag 1=> cause IRQ on tx end, 0=>no IRQ on tx end
  368.  *
  369.  */
  370. extern void vxp524_bm_send_data(vxp524_t* instance, 
  371.       unsigned long buffer, unsigned long count,
  372.       int irqEndFlag);
  373. /**
  374.  *
  375.  * Flush the vxp BM system
  376.  *
  377.  * @param instance Vxp524 instance to use
  378.  *
  379.  */
  380. extern void vxp524_bm_flush(vxp524_t* instance);
  381. /**
  382.  *
  383.  * Reset the Vxp524 BM system
  384.  *
  385.  * @param instance Vxp524 instance to use
  386.  *
  387.  */
  388. extern void vxp524_bm_reset(vxp524_t* instance);
  389. /**
  390.  *
  391.  * Check whether the BM operation has completed yet?
  392.  *
  393.  * @param instance Vxp524 instance to use
  394.  * @param checkType 0 => see if the PCI master cycle has finished yet...
  395.  *                  1 => see if the IRQ has occurred yet, and clear it if so
  396.  *
  397.  * @return 1 if the operation HAS completed, 0 if not
  398.  *
  399.  */
  400. extern int vxp524_bm_completed(vxp524_t* instance, int checkType);
  401. /**
  402.  *
  403.  * Checks if BM in use, and sets BM in use flag if it wasn't
  404.  *
  405.  * @param instance vxp524 instance to use
  406.  *
  407.  * @return 0 on success, -EBUSY if BM is already in use
  408.  *
  409.  */
  410. extern int vxp524_bm_check_status(vxp524_t* instance);
  411. /**
  412.  *
  413.  * Mark BM as no longer in use
  414.  *
  415.  */
  416. extern int vxp524_bm_not_in_use(vxp524_t* instance);
  417. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  418. // Register get/set functions
  419. /**
  420.  *
  421.  * Get (8bit) register from the Vxp524
  422.  * This retrives the value: [reg] (LSB first)
  423.  *
  424.  * @param instance Instance of the VxP524 to use
  425.  * @param reg Register to retrieve
  426.  * @return The register's value (or negative on error)
  427.  *
  428.  */
  429. extern int vxp524_get_reg(vxp524_t* instance, int reg);
  430. /**
  431.  *
  432.  * Set (8bit) register on the Vxp524
  433.  * This sets the value: [reg] (LSB first)
  434.  *
  435.  * @param instance Instance of the VxP524 to use
  436.  * @param reg Register to retrieve
  437.  * @param val 8 bit value to set
  438.  *
  439.  */
  440. extern void vxp524_set_reg(vxp524_t* instance, int reg, int val);
  441. /**
  442.  *
  443.  * Get (16bit) register from the Vxp524
  444.  * This retrives the value: [reg] | ([reg+1] <<8) (LSB first)
  445.  *
  446.  * @param instance Instance of the VxP524 to use
  447.  * @param reg Register to retrieve
  448.  * @return The register's value (or negative on error)
  449.  *
  450.  */
  451. extern int vxp524_get_reg16(vxp524_t* instance, int reg);
  452. /**
  453.  *
  454.  * Set (16bit) register on the Vxp524
  455.  * This sets the value: [reg], [reg+1] (LSB first)
  456.  *
  457.  * @param instance Instance of the VxP524 to use
  458.  * @param reg Register to retrieve
  459.  * @param val 8 bit value to set
  460.  *
  461.  */
  462. extern void vxp524_set_reg16(vxp524_t* instance, int reg, int val);
  463. /**
  464.  *
  465.  * Get (24bit) register from the Vxp524
  466.  * This retrives the value: [reg] | ([reg+1] <<8) | ([reg+2]<<16) (LSB first)
  467.  *
  468.  * @param instance Instance of the VxP524 to use
  469.  * @param reg Register to retrieve
  470.  * @return The register's value (or negative on error)
  471.  *
  472.  */
  473. extern int vxp524_get_reg24(vxp524_t* instance, int reg);
  474. /**
  475.  *
  476.  * Set (24bit) register on the Vxp524
  477.  * This sets the value: [reg], [reg+1], [reg+2] (LSB first)
  478.  *
  479.  * @param instance Instance of the VxP524 to use
  480.  * @param reg Register to retrieve
  481.  * @param val 8 bit value to set
  482.  *
  483.  */
  484. extern void vxp524_set_reg24(vxp524_t* instance, int reg, int val);
  485. /**
  486.  *
  487.  * Get (32bit) register from the Vxp524
  488.  * This retrives the value: [reg] | ([reg+1] <<8) | ([reg+2]<<16) | ([reg+3]<<24) (LSB first)
  489.  *
  490.  * @param instance Instance of the VxP524 to use
  491.  * @param reg Register to retrieve
  492.  * @return The register's value (or negative on error)
  493.  *
  494.  */
  495. extern int vxp524_get_reg32(vxp524_t* instance, int reg);
  496. /**
  497.  *
  498.  * Set (32bit) register on the Vxp524
  499.  * This sets the value: [reg], [reg+1], [reg+2], [reg+3] (LSB first)
  500.  *
  501.  * @param instance Instance of the VxP524 to use
  502.  * @param reg Register to retrieve
  503.  * @param val 8 bit value to set
  504.  *
  505.  */
  506. extern void vxp524_set_reg32(vxp524_t* instance, int reg, int val);
  507. /**
  508.  *
  509.  * Get specified bitmask of an (8bit) register from vxp524
  510.  *
  511.  * @param instance Instance of the vxp524 to use
  512.  * @param reg Register to retrieve
  513.  * @param bitmask Bitmask of bits to retrive from that register
  514.  *
  515.  * @return The register bitvalues
  516.  *
  517.  */
  518. extern int vxp524_get_bits(vxp524_t* instance, int reg, int bitmask);
  519. /**
  520.  *
  521.  * Set specified bits of an (8bit) register on vxp524
  522.  *
  523.  * @param instance Instance of the vxp524 to use
  524.  * @param reg Register to retrieve
  525.  * @param bitmask Bitmask of bits to set from that register
  526.  * @param valuemask Values of the bits in the bitmask
  527.  *
  528.  */
  529. extern void vxp524_set_bits(vxp524_t* instance, int reg, int bitmask, int valuemask);
  530. #endif