vpif.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. /**
  2. * \file vpif.h
  3. *
  4. * \brief This file contains the driver API prototypes and macro definitions
  5. * for the VPIF module.
  6. */
  7. /*
  8. * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
  9. */
  10. /*
  11. * Redistribution and use in source and binary forms, with or without
  12. * modification, are permitted provided that the following conditions
  13. * are met:
  14. *
  15. * Redistributions of source code must retain the above copyright
  16. * notice, this list of conditions and the following disclaimer.
  17. *
  18. * Redistributions in binary form must reproduce the above copyright
  19. * notice, this list of conditions and the following disclaimer in the
  20. * documentation and/or other materials provided with the
  21. * distribution.
  22. *
  23. * Neither the name of Texas Instruments Incorporated nor the names of
  24. * its contributors may be used to endorse or promote products derived
  25. * from this software without specific prior written permission.
  26. *
  27. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  28. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  29. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  30. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  31. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  32. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  33. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  34. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  35. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  36. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  37. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  38. *
  39. */
  40. #ifndef _VPIF_H_
  41. #define _VPIF_H__
  42. #include "hw_vpif.h"
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif
  46. /*******************************************************************************
  47. * MACRO DEFINITIONS
  48. *******************************************************************************/
  49. /***************************************************************************/
  50. /*
  51. ** Constants that represent VPIF channel
  52. ** Channel 0 & 1 are capture channels; channel 2 & 3 are display channels
  53. ** Used in most APIs
  54. */
  55. #define VPIF_CHANNEL_0 0
  56. #define VPIF_CHANNEL_1 1
  57. #define VPIF_CHANNEL_2 2
  58. #define VPIF_CHANNEL_3 3
  59. /***************************************************************************/
  60. /*
  61. ** Values that represent top/bottom field
  62. ** Used in all the FBConfig (frame buffer config) APIs
  63. */
  64. #define VPIF_TOP_FIELD 0
  65. #define VPIF_BOTTOM_FIELD 1
  66. /***************************************************************************/
  67. /*
  68. ** Values that represent horizontal/vertical blanking
  69. ** Used in VBI (blanking) APIS
  70. */
  71. #define VPIF_HORIZONTAL 0
  72. #define VPIF_VERTICAL 1
  73. /***************************************************************************/
  74. /*
  75. ** Values that represent luma/chroma data of the active video
  76. ** Used in all the FBConfig (frame buffer config) APIs
  77. */
  78. #define VPIF_LUMA 0
  79. #define VPIF_CHROMA 1
  80. /***************************************************************************/
  81. /*
  82. ** Values that can be passed to VPIFCaptureModeConfig/VPIFDisplayModeConfig
  83. ** API to select mode of capture/display
  84. ** More supported modes will be added
  85. */
  86. #define VPIF_RAW 0
  87. #define VPIF_NONSTANDARD 1
  88. #define VPIF_480I 2
  89. /***************************************************************************/
  90. /*
  91. ** Values that represent different VPIF interrupts
  92. ** Used in all the interrupt APIs
  93. */
  94. #define VPIF_ERROR_INT (1 << VPIF_INTSET_ERROR_SHIFT)
  95. #define VPIF_FRAMEINT_CH3 (1 << VPIF_INTSET_FRAME3_SHIFT)
  96. #define VPIF_FRAMEINT_CH2 (1 << VPIF_INTSET_FRAME2_SHIFT)
  97. #define VPIF_FRAMEINT_CH1 (1 << VPIF_INTSET_FRAME1_SHIFT)
  98. #define VPIF_FRAMEINT_CH0 (1 << VPIF_INTSET_FRAME0_SHIFT)
  99. /***************************************************************************/
  100. /*
  101. ** Values that represent different errors
  102. ** Used in the ErrorStatus APIs
  103. */
  104. /* Underflow error for channel 3 */
  105. #define VPIF_UNDERFLOW3 (1 << VPIF_ERRSTAT_UNDERFLOW3_SHIFT)
  106. /* Underflow error for channel 2 */
  107. #define VPIF_UNDERFLOW2 (1 << VPIF_ERRSTAT_UNDERFLOW2_SHIFT)
  108. /* Overflow error for channel 1 */
  109. #define VPIF_OVERFLOW1 (1 << VPIF_ERRSTAT_OVERFLOW1_SHIFT)
  110. /* Overflow error for channel 0 */
  111. #define VPIF_OVERFLOW0 (1 << VPIF_ERRSTAT_OVERFLOW0_SHIFT)
  112. /* Synchronization error for channel 1 (mismatch EAV2SAV/SAV2EAV) */
  113. #define VPIF_SYNCDISTERR1 (1 << VPIF_ERRSTAT_SYNCDISTERR1_SHIFT)
  114. /* Synchronization error for channel 0 (mismatch EAV2SAV/SAV2EAV) */
  115. #define VPIF_SYNCDISTERR0 (1 << VPIF_ERRSTAT_SYNCDISTERR0_SHIFT)
  116. /* Error in EAV2SAV/SAV2EAV code for channel 1 */
  117. #define VPIF_BITERR1 (1 << VPIF_ERRSTAT_BITERR1_SHIFT)
  118. /* Error in EAV2SAV/SAV2EAV code for channel 1 */
  119. #define VPIF_BITERR0 (1 << VPIF_ERRSTAT_BITERR0_SHIFT)
  120. /***************************************************************************/
  121. /*
  122. ** Values that represent different VPIF DMA request sizes
  123. ** Used in the VPIFDMARequestSizeConfig API
  124. */
  125. #define VPIF_REQSIZE_THIRTY_TWO (VPIF_REQSIZE_BYTES_THIRTY_TWO << VPIF_REQSIZE_BYTES_SHIFT)
  126. #define VPIF_REQSIZE_SIXTY_FOUR (VPIF_REQSIZE_BYTES_SIXTY_FOUR << VPIF_REQSIZE_BYTES_SHIFT)
  127. #define VPIF_REQSIZE_ONE_TWENTY_EIGHT (VPIF_REQSIZE_BYTES_ONE_TWENTY_EIGHT << VPIF_REQSIZE_BYTES_SHIFT)
  128. #define VPIF_REQSIZE_TWO_FIFTY_SIX (VPIF_REQSIZE_BYTES_TWO_FIFTY_SIX << VPIF_REQSIZE_BYTES_SHIFT)
  129. /***************************************************************************/
  130. /*
  131. ** Values that represent VPIF operation mode during emulation suspend
  132. ** Used in the VPIFEmulationControlSet API
  133. */
  134. /* VPIF is halted during emulation suspension */
  135. #define VPIF_HALT (0 << VPIF_EMUCTRL_FREE_SHIFT)
  136. /* VPIF operates normally during emulation suspension */
  137. #define VPIF_FREE (1 << VPIF_EMUCTRL_FREE_SHIFT)
  138. /***************************************************************************/
  139. /*
  140. ** Values that represent which edge of the pixel clock data changes phase on
  141. ** Used in the ClkedgeModeSelect APIs for all channels (3/2/1/0)
  142. */
  143. /* Data changes on the rising edge of the pixel */
  144. #define VPIF_CLKEDGE_RISING (1 << VPIF_C0CTRL_CLKEDGE_SHIFT)
  145. /* Data changes on the falling edge of the pixel */
  146. #define VPIF_CLKEDGE_FALLING (0 << VPIF_C0CTRL_CLKEDGE_SHIFT)
  147. /***************************************************************************/
  148. /*
  149. ** Values that represent width of the raw data input
  150. ** Used in the VPIFCaptureRawDatawidthConfig API
  151. */
  152. #define VPIF_RAW_EIGHT_BPS (VPIF_C0CTRL_DATAWIDTH_EIGHT_BPS << VPIF_C0CTRL_DATAWIDTH_SHIFT)
  153. #define VPIF_RAW_TEN_BPS (VPIF_C0CTRL_DATAWIDTH_TEN_BPS << VPIF_C0CTRL_DATAWIDTH_SHIFT)
  154. #define VPIF_RAW_TWELVE_BPS (VPIF_C0CTRL_DATAWIDTH_TWELVE_BPS << VPIF_C0CTRL_DATAWIDTH_SHIFT)
  155. /***************************************************************************/
  156. /*
  157. ** Values that represent polarity of Field ID, Vblank, and Hblank are inverted
  158. ** respectively during raw capture
  159. ** Used in the invSet APIs
  160. */
  161. #define VPIF_RAW_FID_INVERT (1 << VPIF_C0CTRL_FIDINV_SHIFT)
  162. #define VPIF_RAW_VVALID_INVERT (1 << VPIF_C0CTRL_VVINV_SHIFT)
  163. #define VPIF_RAW_HVALID_INVERT (1 << VPIF_C0CTRL_HVINV_SHIFT)
  164. /***************************************************************************/
  165. /*
  166. ** Values that represent storage mode of the data.
  167. ** Used in the FieldframeModeSelect APIs of channel 2/0. However, setting on
  168. ** channel 2 will apply to channel 3, and setting on channel 0 will apply to
  169. ** channel 1.
  170. */
  171. #define VPIF_FIELD_BASED (0 << VPIF_C0CTRL_FIELDFRAME_SHIFT)
  172. #define VPIF_FRAME_BASED (1 << VPIF_C0CTRL_FIELDFRAME_SHIFT)
  173. /***************************************************************************/
  174. /*
  175. ** Values that represent format of the captured data
  176. ** Used in the VPIFCaptureIntrprogModeSelect API
  177. */
  178. #define VPIF_CAPTURE_INTERLACED (0 << VPIF_C0CTRL_INTRPROG_SHIFT)
  179. #define VPIF_CAPTURE_PROGRESSIVE (1 << VPIF_C0CTRL_INTRPROG_SHIFT)
  180. /***************************************************************************/
  181. /*
  182. ** Values that represent format of the data to be displayed
  183. ** Used in the VPIFDisplayIntrprogModeSelect API
  184. */
  185. #define VPIF_DISPLAY_INTERLACED (0 << VPIF_C2CTRL_INTRPROG_SHIFT)
  186. #define VPIF_DISPLAY_PROGRESSIVE (1 << VPIF_C3CTRL_INTRPROG_SHIFT)
  187. /***************************************************************************/
  188. /*
  189. ** Values that represent when frame interrupt occurs and sent to the CPU (in interlaced mode)
  190. ** Used in the IntframeConfig APIs of all channels
  191. */
  192. /* Interrupt occurs after top field is captured/displayed */
  193. #define VPIF_FRAME_INTERRUPT_TOP (0 << VPIF_C0CTRL_INTFRAME_SHIFT)
  194. /* Interrupt occurs after bottom field is captured/displayed */
  195. #define VPIF_FRAME_INTERRUPT_BOTTOM (1 << VPIF_C0CTRL_INTFRAME_SHIFT)
  196. /* Interrupt occurs after either field is captured/displayed */
  197. #define VPIF_FRAME_INTERRUPT_TOP_BOTTOM (2 << VPIF_C0CTRL_INTFRAME_SHIFT)
  198. /***************************************************************************/
  199. /*
  200. ** Values that represent the particular field being processed (in interlaced mode)
  201. ** Value read in the FidModeRead APIs of all channels
  202. */
  203. #define VPIF_FIELD_IDENTIFICATION_TOP (0 << VPIF_C0CTRL_FID_SHIFT)
  204. #define VPIF_FIELD_IDENTIFICATION_BOTTOM (1 << VPIF_C0CTRL_FID_SHIFT)
  205. /***************************************************************************/
  206. /*
  207. ** Values that represent the data format
  208. ** Value used in the YcmuxModeSelect APIs of all channels
  209. */
  210. /* Y & C data are non-muxed, parallel over a 16-bit bus */
  211. #define VPIF_YC_NONMUXED (0 << VPIF_C0CTRL_YCMUX_SHIFT)
  212. /* Y & C data are muxed over a 8-bit bus */
  213. #define VPIF_YC_MUXED (1 << VPIF_C0CTRL_YCMUX_SHIFT)
  214. /***************************************************************************/
  215. /*
  216. ** Values that represent the capture mode.
  217. ** (Raw w/ external sync, or BT w/ embedded sync)
  218. ** Value used in the VPIFCaptureCapmodeModeSelect API
  219. */
  220. #define VPIF_CAPTURE_BT (0 << VPIF_C0CTRL_CAPMODE_SHIFT)
  221. #define VPIF_CAPTURE_RAW (1 << VPIF_C0CTRL_CAPMODE_SHIFT)
  222. /***************************************************************************/
  223. /*
  224. ** Structures and Variables
  225. */
  226. /***************************************************************************/
  227. /*
  228. ** The elements of the vbufParam structure defines the structures of a video frame
  229. ** Used mainly in nonstandard BT mode.
  230. */
  231. typedef struct vbufParam
  232. {
  233. unsigned int sav2eav;
  234. unsigned int eav2sav;
  235. unsigned int vsize;
  236. unsigned int l1;
  237. unsigned int l3;
  238. unsigned int l5;
  239. unsigned int l7;
  240. unsigned int l9;
  241. unsigned int l11;
  242. } VPIFVbufParam;
  243. /***************************************************************************/
  244. /*
  245. ** Function Prototypes
  246. */
  247. extern void VPIFErrorStatusClear(unsigned int baseAddr, unsigned int err);
  248. extern unsigned int VPIFErrorStatus(unsigned int baseAddr, unsigned int err);
  249. extern void VPIFDMARequestSizeConfig(unsigned int baseAddr, unsigned int size);
  250. extern void VPIFEmulationControlSet(unsigned int baseAddr, unsigned int mode);
  251. extern void VPIFInterruptEnable(unsigned int baseAddr, unsigned int intr);
  252. extern void VPIFInterruptDisable(unsigned int baseAddr, unsigned int intr);
  253. extern void VPIFInterruptEnableSet(unsigned int baseAddr, unsigned int intr);
  254. extern void VPIFInterruptEnableClear(unsigned int baseAddr, unsigned int intr);
  255. extern void VPIFInterruptStatusClear(unsigned int baseAddr, unsigned int intr);
  256. extern unsigned int VPIFInterruptStatus(unsigned int baseAddr, unsigned int intr);
  257. /* C0CTRL & C1CTRL */
  258. extern void VPIFCaptureClkedgeModeSelect(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  259. extern void VPIFCaptureRawDatawidthConfig(unsigned int baseAddr, unsigned int width);
  260. extern void VPIFCaptureRawIntlineConfig(unsigned int baseAddr, unsigned int interval);
  261. extern void VPIFCaptureRawFidinvSet(unsigned int baseAddr, unsigned int mode);
  262. extern void VPIFCaptureRawVvinvSet(unsigned int baseAddr, unsigned int mode);
  263. extern void VPIFCaptureRawHvinvSet(unsigned int baseAddr, unsigned int mode);
  264. extern void VPIFCaptureFieldframeModeSelect(unsigned int baseAddr, unsigned int mode);
  265. extern void VPIFCaptureIntrprogModeSelect(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  266. extern void VPIFCaptureVancEnable(unsigned int baseAddr, unsigned int channel);
  267. extern void VPIFCaptureVancDisable(unsigned int baseAddr, unsigned int channel);
  268. extern void VPIFCaptureHancEnable(unsigned int baseAddr, unsigned int channel);
  269. extern void VPIFCaptureHancDisable(unsigned int baseAddr, unsigned int channel);
  270. extern void VPIFCaptureIntframeConfig(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  271. extern unsigned int VPIFCaptureFidModeRead(unsigned int baseAddr, unsigned int channel);
  272. extern void VPIFCaptureYcmuxModeSelect(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  273. extern void VPIFCaptureCapmodeModeSelect(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  274. extern void VPIFCaptureChanenEnable(unsigned int baseAddr, unsigned int channel);
  275. extern void VPIFCaptureChanenDisable(unsigned int baseAddr, unsigned int channel);
  276. extern void VPIFCaptureVBIFBConfig(unsigned int baseAddr, unsigned int channel, unsigned field, unsigned hv, unsigned int addr, unsigned int offset);
  277. extern unsigned int VPIFCaptureVBIFBExchange(unsigned int baseAddr, unsigned int channel, unsigned field, unsigned hv, unsigned int addr, unsigned int offset);
  278. extern void VPIFCaptureModeConfig(unsigned int baseAddr, unsigned int mode, unsigned int sdChannel, unsigned int rawWidth, VPIFVbufParam* buf);
  279. extern void VPIFCaptureFBConfig(unsigned int baseAddr, unsigned int channel, unsigned int field, unsigned yc, unsigned int addr, unsigned int offset);
  280. extern unsigned int VPIFCaptureFBExchange(unsigned int baseAddr, unsigned int channel, unsigned int field, unsigned yc, unsigned int addr, unsigned int offset);
  281. /* C2CTRL & C3CTRL */
  282. extern void VPIFDisplayClkedgeModeSelect(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  283. extern void VPIFDisplayClipancEnable(unsigned int baseAddr, unsigned int channel);
  284. extern void VPIFDisplayClipancDisable(unsigned int baseAddr, unsigned int channel);
  285. extern void VPIFDisplayClipvidEnable(unsigned int baseAddr, unsigned int channel);
  286. extern void VPIFDisplayClipvidDisable(unsigned int baseAddr, unsigned int channel);
  287. extern void VPIFDisplayFieldframeModeSelect(unsigned int baseAddr, unsigned int mode);
  288. extern void VPIFDisplayIntrprogModeSelect(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  289. extern void VPIFDisplayPixelEnable(unsigned int baseAddr, unsigned int channel);
  290. extern void VPIFDisplayPixelDisable(unsigned int baseAddr, unsigned int channel);
  291. extern void VPIFDisplayVancEnable(unsigned int baseAddr, unsigned int channel);
  292. extern void VPIFDisplayVancDisable(unsigned int baseAddr, unsigned int channel);
  293. extern void VPIFDisplayHancEnable(unsigned int baseAddr, unsigned int channel);
  294. extern void VPIFDisplayHancDisable(unsigned int baseAddr, unsigned int channel);
  295. extern void VPIFDisplayIntframeConfig(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  296. extern unsigned int VPIFDisplayFidModeRead(unsigned int baseAddr, unsigned int channel);
  297. extern void VPIFDisplayYcmuxModeSelect(unsigned int baseAddr, unsigned int channel, unsigned int mode);
  298. extern void VPIFDisplayClkenEnable(unsigned int baseAddr, unsigned int channel);
  299. extern void VPIFDisplayClkenDisable(unsigned int baseAddr, unsigned int channel);
  300. extern void VPIFDisplayChanenEnable(unsigned int baseAddr, unsigned int channel);
  301. extern void VPIFDisplayChanenDisable(unsigned int baseAddr, unsigned int channel);
  302. extern void VPIFDisplayVBIFBConfig(unsigned int baseAddr, unsigned int channel, unsigned field, unsigned hv, unsigned int addr, unsigned int offset);
  303. extern unsigned int VPIFDisplayVBIFBExchange(unsigned int baseAddr, unsigned int channel, unsigned field, unsigned hv, unsigned int addr, unsigned int offset);
  304. extern void VPIFDisplayVBIFBSizeConfig(unsigned int baseAddr, unsigned int channel, unsigned field, unsigned hv, unsigned int vpos, unsigned int hpos, unsigned int vsize, unsigned int hsize);
  305. extern void VPIFDisplayModeConfig(unsigned int baseAddr, unsigned int mode, unsigned int sdChannel, VPIFVbufParam* buf);
  306. extern void VPIFDisplayFBConfig(unsigned int baseAddr, unsigned int channel, unsigned int field, unsigned yc, unsigned int addr, unsigned int offset);
  307. extern unsigned int VPIFDisplayFBExchange(unsigned int baseAddr, unsigned int channel, unsigned int field, unsigned yc, unsigned int addr, unsigned int offset);
  308. #ifdef __cplusplus
  309. }
  310. #endif
  311. #endif