drv_jpg_interface.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. #ifndef MARK_SISIDCT_H
  2. #define MARK_SISIDCT_H
  3. #ifdef __KERNEL__
  4. #include <drv_devices.h>
  5. #endif
  6. #include <drv_types.h>
  7. #define SISIDCT_DEV_FILE "/dev/sisidct0"
  8. //#define SISIDCT_DEV_MAJOR 99 // sisidct device major code
  9. #define SISIDCT_DEV_MAJOR SISJPEG_DECODER_DEV_MAJOR
  10. #define SISIDCT_DEV_MINOR 0
  11. #define SISIDCT_DEV_NUM 1 // Max number of device
  12. #define IDCT 1
  13. // Driver option
  14. #define SW_MODE_OPTIMAL 0
  15. #define SW_MODE 1
  16. #define HW_DSP_DECODER 2
  17. #define HW_IDCT_ONLY 3
  18. #define HW_ZZ_DEQUANT_IDCT 4
  19. #define HW_JPEG_DECODER 5
  20. #define VIP_PANORAMIC 0
  21. #define VIP_THUMBNAIL 1
  22. #define DSP_Enable 1
  23. #if DSP_Enable
  24. #define DSP_DEBUG 0
  25. #define DSP_DATA_DEBUG 0
  26. #define QTBL_DEBUG 0
  27. #define HUFF_DEBUG 0
  28. #define BITSTREAM_DEBUG 0
  29. #define OutputY_DEBUG 0
  30. #define OutputUV_DEBUG 0
  31. #define MPO_DEBUG 0
  32. #endif
  33. typedef struct _IDCT_IOC_IOData
  34. {
  35. // for reallocated I/O
  36. UINT16 port;
  37. UINT8 index;
  38. UINT8 value;
  39. } IDCT_IOC_IOData, *IDCT_IOC_IODataPtr;
  40. typedef struct _IDCT_IOC_MMIOData
  41. {
  42. UINT32 addr;
  43. UINT32 value;
  44. } IDCT_IOC_MMIOData, *IDCT_IOC_MMIODataPtr;
  45. typedef enum
  46. {
  47. ILF,
  48. QPEL,
  49. Rx0,
  50. Rx1,
  51. }DSP_LD_SPACE;
  52. typedef enum
  53. {
  54. FMT_444 = 0x00020000,
  55. FMT_411 = 0x00000000,
  56. FMT_400 = 0x00040000,
  57. FMT_422MH = 0x00050000,
  58. FMT_422MV = 0x00060000,
  59. FMT_422H = 0x00010000,
  60. FMT_422V = 0x00030000,
  61. }Encode_mod;
  62. typedef enum
  63. {
  64. DC_0 = 0x00000000,
  65. DC_1 = 0x00000040,
  66. AC_0 = 0x00000080,
  67. AC_1 = 0x00000540,
  68. }Huff_table_no;
  69. typedef enum
  70. {
  71. SCL_1_1 = 0,
  72. SCL_1_2 = 1,
  73. SCL_1_4 = 2,
  74. SCL_1_8 = 3,
  75. }Scale_num;
  76. typedef struct
  77. {
  78. INT32 index;
  79. DSP_LD_SPACE LD_Space;
  80. UINT32 data;
  81. } DSP_LD_4B, *pDSP_LD_4B;
  82. typedef struct _DSP_Decode_Data
  83. {
  84. UINT16 MCUs_in_width;
  85. UINT8 *Quant_table;
  86. UINT16 Quant_Len;
  87. UINT8 *Huff_table;
  88. UINT16 Huff_Len;
  89. UINT8 *outputY;
  90. UINT32 outputY_Len;
  91. UINT8 *outputUV;
  92. UINT32 outputUV_Len;
  93. UINT8 *BitStream;
  94. UINT32 BitStream_Len;
  95. pDSP_LD_4B DRI; //Rx0 index 18: {DRI}
  96. pDSP_LD_4B MCUs_IMCUs_Rx1; //Rx1, lif index 0: {MCUs, IMCUs}
  97. pDSP_LD_4B MCUs_IMCUs_ilf;
  98. pDSP_LD_4B color_format; //Rx0 index 19: {format, 0x0000} 400=> 0004, 411=> 0000, 422_H==> 0001, 422_V=> 0003, 444=> 0002, 422MH=> 0005, 422MV=> 0006
  99. pDSP_LD_4B cformat_downsample; //ilf index 1: (format, downsample} downsample: 0->1/1, 1->1/2, 2->1/4, 3->1/8
  100. pDSP_LD_4B sram_first_CMD[4]; //Rx0 index 2(DC_Y),3(AC_Y),4(DC_UV),5(AC_UV):{XX first bit X, XXXX} 1==>0, 2==>1, 3==>2, 4==>3
  101. pDSP_LD_4B comp_huff_tbl_no[6]; //Rx0 index 25:30 [0]:DC_Y, [1]:AC_Y, [2]:DC_U, [3]:AC_V, [4]:DC_V, [5]:AC_V,
  102. UINT32 Remap_Total_Len;
  103. UINT8 isAndroid;
  104. UINT8 MPOPicIdx;
  105. UINT16 output_width;
  106. UINT16 output_height;
  107. UINT8 HwDecodeTimes;
  108. UINT8 HwSpecialDecode;
  109. }DSP_Decode_Data, *DSP_Decode_DataPtr;
  110. typedef struct _IDCT_IOC_DEVData
  111. {
  112. UINT32 num_MCUs;
  113. UINT8 Y_Scale;
  114. UINT32 Y_H;
  115. UINT32 Y_V;
  116. UINT8 HW_mode; //SW_MODE, HW_DSP_DECODER
  117. UINT8 pic_scale; //used for ZZ_QUANT_IDCT with scale
  118. UINT8 *pVIPBuf;
  119. UINT32 pic_width;
  120. UINT32 pic_height;
  121. UINT32 ith_row;
  122. UINT32 ith_iMCU_row; //used for SIS_JPEG_DECODER only, begin from 0
  123. //Add by Jason
  124. UINT8 *pSrcBuf;
  125. UINT32 ith_dest_row;
  126. UINT32 pic_dest_width;
  127. UINT32 pic_dest_height;
  128. //hardware will wirte one iMCU_rows data into physical address
  129. //==> 01.10 New feature
  130. UINT16 driver_debug; //0: disable, 1: enable
  131. UINT16 vip_resolution_X;
  132. UINT16 vip_resolution_Y;
  133. UINT16 vip_thumbnail_X;
  134. UINT16 vip_thumbnail_Y;
  135. INT16 vip_display_mode; //VIP_PANORAMIC or VIP_THUMBNAIL
  136. INT16 thumb_index;
  137. UINT16 thumb_upper_scope;
  138. UINT16 thumb_lower_scope;
  139. UINT16 thumb_left_scope;
  140. UINT16 thumb_right_scope;
  141. UINT16 thumb_tunnel;
  142. UINT16 thumb_x_items;
  143. UINT16 thumb_y_items;
  144. //=>software thumbnail_scaling
  145. UINT16 thumb_delta_x;
  146. UINT16 thumb_delta_y;
  147. UINT16 thumb_dx_counts;
  148. UINT16 thumb_dy_counts;;
  149. UINT16 *pthumb_dx_order;
  150. UINT16 *pthumb_dy_order;
  151. UINT32 thumbpic_offset; //starting address of thumbnail picture
  152. //<=
  153. UINT32 vip_lineoffset;
  154. UINT32 vip_address;
  155. UINT32 rotate_address; //used for hardware pSrc, pDest and pQuant
  156. UINT32 progressive_mode;
  157. UINT16 b_mp3_playing;
  158. //<==
  159. UINT8 haveJPEGEffects;
  160. }IDCT_IOC_DEVData, *IDCT_IOC_DEVDataPtr;
  161. // SiS Defined I/O Control Signal
  162. #define IDCT_IOC_MAGIC 'i'
  163. #define IDCT_IOC_BASE 192
  164. #define IDCT_IOC_R_IO _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x01, IDCT_IOC_IOData)
  165. #define IDCT_IOC_W_IO _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x02, IDCT_IOC_IOData)
  166. #define IDCT_IOC_R_MIO _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x03, IDCT_IOC_MMIOData)
  167. #define IDCT_IOC_W_MIO _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x04, IDCT_IOC_MMIOData)
  168. #if DSP_Enable
  169. #define DSP_HW_INIT _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x05, DSP_Decode_Data)
  170. #define DSP_Initial_MMIO _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x06, DSP_Decode_Data)
  171. #define DSP_Deinitial_MMIO _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x07, DSP_Decode_Data)
  172. #define DSP_RESET _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x08, DSP_Decode_Data)
  173. #define DSP_Load_Table _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x09, DSP_Decode_Data)
  174. #define DSP_update_LD _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x010, DSP_Decode_Data)
  175. #define DSP_Load_LP_LD _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x011, DSP_Decode_Data)
  176. #define DSP_Set_Output_Info _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x012, DSP_Decode_Data)
  177. #define DSP_Fire _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x015, DSP_Decode_Data)
  178. #ifndef CONFIG_JPG_MFD_Module
  179. #define Get_OutputY_Addr _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x016, unsigned long)
  180. #define Get_OutputUV_Addr _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x017, unsigned long)
  181. #endif
  182. #define Display_Image _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x018, IDCT_IOC_DEVData)
  183. #ifndef CONFIG_JPG_MFD_Module
  184. #define Get_PhysBase_Addr _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x019, unsigned long)
  185. #endif
  186. #define Get_output_Width _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x01b, unsigned long)
  187. #define Get_output_Height _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x01c, unsigned long)
  188. #define Get_Bitstream_Addr _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x01e, unsigned long)
  189. #define Get_DecodeErrFlag _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x021, JPEG_Decode_Data)
  190. #define Set_DecodeErrFlag _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x022, JPEG_Decode_Data)
  191. #endif
  192. #define HW_VIP_DISPLAY_CRCBY _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x013, IDCT_IOC_DEVData)
  193. #ifndef CONFIG_JPG_MFD_Module
  194. #define IDCT_IOC_HW_VIP_MEM_MODE _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x014, UINT8)
  195. #endif
  196. #define IDCT_IOC_GET_MEMORY_SIZE _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x01a, long)
  197. #define IDCT_IOC_SET_SOURCE_TYPE _IOWR(IDCT_IOC_MAGIC, IDCT_IOC_BASE+0x01d, UINT32)
  198. #endif // MARK_SISIDCT_H