home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / powerpc / include / asm / ps3av.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  23.6 KB  |  748 lines

  1. /*
  2.  *  PS3 AV backend support.
  3.  *
  4.  *  Copyright (C) 2007 Sony Computer Entertainment Inc.
  5.  *  Copyright 2007 Sony Corp.
  6.  *
  7.  *  This program is free software; you can redistribute it and/or modify
  8.  *  it under the terms of the GNU General Public License as published by
  9.  *  the Free Software Foundation; version 2 of the License.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *  GNU General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19.  */
  20.  
  21. #ifndef _ASM_POWERPC_PS3AV_H_
  22. #define _ASM_POWERPC_PS3AV_H_
  23.  
  24. /** command for ioctl() **/
  25. #define PS3AV_VERSION 0x205    /* version of ps3av command */
  26.  
  27. #define PS3AV_CID_AV_INIT              0x00000001
  28. #define PS3AV_CID_AV_FIN               0x00000002
  29. #define PS3AV_CID_AV_GET_HW_CONF       0x00000003
  30. #define PS3AV_CID_AV_GET_MONITOR_INFO  0x00000004
  31. #define PS3AV_CID_AV_ENABLE_EVENT      0x00000006
  32. #define PS3AV_CID_AV_DISABLE_EVENT     0x00000007
  33. #define PS3AV_CID_AV_TV_MUTE           0x0000000a
  34.  
  35. #define PS3AV_CID_AV_VIDEO_CS          0x00010001
  36. #define PS3AV_CID_AV_VIDEO_MUTE        0x00010002
  37. #define PS3AV_CID_AV_VIDEO_DISABLE_SIG 0x00010003
  38. #define PS3AV_CID_AV_AUDIO_PARAM       0x00020001
  39. #define PS3AV_CID_AV_AUDIO_MUTE        0x00020002
  40. #define PS3AV_CID_AV_HDMI_MODE         0x00040001
  41.  
  42. #define PS3AV_CID_VIDEO_INIT           0x01000001
  43. #define PS3AV_CID_VIDEO_MODE           0x01000002
  44. #define PS3AV_CID_VIDEO_FORMAT         0x01000004
  45. #define PS3AV_CID_VIDEO_PITCH          0x01000005
  46.  
  47. #define PS3AV_CID_AUDIO_INIT           0x02000001
  48. #define PS3AV_CID_AUDIO_MODE           0x02000002
  49. #define PS3AV_CID_AUDIO_MUTE           0x02000003
  50. #define PS3AV_CID_AUDIO_ACTIVE         0x02000004
  51. #define PS3AV_CID_AUDIO_INACTIVE       0x02000005
  52. #define PS3AV_CID_AUDIO_SPDIF_BIT      0x02000006
  53. #define PS3AV_CID_AUDIO_CTRL           0x02000007
  54.  
  55. #define PS3AV_CID_EVENT_UNPLUGGED      0x10000001
  56. #define PS3AV_CID_EVENT_PLUGGED        0x10000002
  57. #define PS3AV_CID_EVENT_HDCP_DONE      0x10000003
  58. #define PS3AV_CID_EVENT_HDCP_FAIL      0x10000004
  59. #define PS3AV_CID_EVENT_HDCP_AUTH      0x10000005
  60. #define PS3AV_CID_EVENT_HDCP_ERROR     0x10000006
  61.  
  62. #define PS3AV_CID_AVB_PARAM            0x04000001
  63.  
  64. /* max backend ports */
  65. #define PS3AV_HDMI_MAX                 2    /* HDMI_0 HDMI_1 */
  66. #define PS3AV_AVMULTI_MAX              1    /* AVMULTI_0 */
  67. #define PS3AV_AV_PORT_MAX              (PS3AV_HDMI_MAX + PS3AV_AVMULTI_MAX)
  68. #define PS3AV_OPT_PORT_MAX             1    /* SPDIF0 */
  69. #define PS3AV_HEAD_MAX                 2    /* HEAD_A HEAD_B */
  70.  
  71. /* num of pkt for PS3AV_CID_AVB_PARAM */
  72. #define PS3AV_AVB_NUM_VIDEO            PS3AV_HEAD_MAX
  73. #define PS3AV_AVB_NUM_AUDIO            0    /* not supported */
  74. #define PS3AV_AVB_NUM_AV_VIDEO         PS3AV_AV_PORT_MAX
  75. #define PS3AV_AVB_NUM_AV_AUDIO         PS3AV_HDMI_MAX
  76.  
  77. #define PS3AV_MUTE_PORT_MAX            1    /* num of ports in mute pkt */
  78.  
  79. /* event_bit */
  80. #define PS3AV_CMD_EVENT_BIT_UNPLUGGED            (1 << 0)
  81. #define PS3AV_CMD_EVENT_BIT_PLUGGED            (1 << 1)
  82. #define PS3AV_CMD_EVENT_BIT_HDCP_DONE            (1 << 2)
  83. #define PS3AV_CMD_EVENT_BIT_HDCP_FAIL            (1 << 3)
  84. #define PS3AV_CMD_EVENT_BIT_HDCP_REAUTH            (1 << 4)
  85. #define PS3AV_CMD_EVENT_BIT_HDCP_TOPOLOGY        (1 << 5)
  86.  
  87. /* common params */
  88. /* mute */
  89. #define PS3AV_CMD_MUTE_OFF                0x0000
  90. #define PS3AV_CMD_MUTE_ON                0x0001
  91. /* avport */
  92. #define PS3AV_CMD_AVPORT_HDMI_0                0x0000
  93. #define PS3AV_CMD_AVPORT_HDMI_1                0x0001
  94. #define PS3AV_CMD_AVPORT_AVMULTI_0            0x0010
  95. #define PS3AV_CMD_AVPORT_SPDIF_0            0x0020
  96. #define PS3AV_CMD_AVPORT_SPDIF_1            0x0021
  97.  
  98. /* for av backend */
  99. /* av_mclk */
  100. #define PS3AV_CMD_AV_MCLK_128                0x0000
  101. #define PS3AV_CMD_AV_MCLK_256                0x0001
  102. #define PS3AV_CMD_AV_MCLK_512                0x0003
  103. /* av_inputlen */
  104. #define PS3AV_CMD_AV_INPUTLEN_16            0x02
  105. #define PS3AV_CMD_AV_INPUTLEN_20            0x0a
  106. #define PS3AV_CMD_AV_INPUTLEN_24            0x0b
  107. /* alayout */
  108. #define PS3AV_CMD_AV_LAYOUT_32                (1 << 0)
  109. #define PS3AV_CMD_AV_LAYOUT_44                (1 << 1)
  110. #define PS3AV_CMD_AV_LAYOUT_48                (1 << 2)
  111. #define PS3AV_CMD_AV_LAYOUT_88                (1 << 3)
  112. #define PS3AV_CMD_AV_LAYOUT_96                (1 << 4)
  113. #define PS3AV_CMD_AV_LAYOUT_176                (1 << 5)
  114. #define PS3AV_CMD_AV_LAYOUT_192                (1 << 6)
  115. /* hdmi_mode */
  116. #define PS3AV_CMD_AV_HDMI_MODE_NORMAL            0xff
  117. #define PS3AV_CMD_AV_HDMI_HDCP_OFF            0x01
  118. #define PS3AV_CMD_AV_HDMI_EDID_PASS            0x80
  119. #define PS3AV_CMD_AV_HDMI_DVI                0x40
  120.  
  121. /* for video module */
  122. /* video_head */
  123. #define PS3AV_CMD_VIDEO_HEAD_A                0x0000
  124. #define PS3AV_CMD_VIDEO_HEAD_B                0x0001
  125. /* video_cs_out video_cs_in */
  126. #define PS3AV_CMD_VIDEO_CS_NONE                0x0000
  127. #define PS3AV_CMD_VIDEO_CS_RGB_8            0x0001
  128. #define PS3AV_CMD_VIDEO_CS_YUV444_8            0x0002
  129. #define PS3AV_CMD_VIDEO_CS_YUV422_8            0x0003
  130. #define PS3AV_CMD_VIDEO_CS_XVYCC_8            0x0004
  131. #define PS3AV_CMD_VIDEO_CS_RGB_10            0x0005
  132. #define PS3AV_CMD_VIDEO_CS_YUV444_10            0x0006
  133. #define PS3AV_CMD_VIDEO_CS_YUV422_10            0x0007
  134. #define PS3AV_CMD_VIDEO_CS_XVYCC_10            0x0008
  135. #define PS3AV_CMD_VIDEO_CS_RGB_12            0x0009
  136. #define PS3AV_CMD_VIDEO_CS_YUV444_12            0x000a
  137. #define PS3AV_CMD_VIDEO_CS_YUV422_12            0x000b
  138. #define PS3AV_CMD_VIDEO_CS_XVYCC_12            0x000c
  139. /* video_vid */
  140. #define PS3AV_CMD_VIDEO_VID_NONE            0x0000
  141. #define PS3AV_CMD_VIDEO_VID_480I            0x0001
  142. #define PS3AV_CMD_VIDEO_VID_576I            0x0003
  143. #define PS3AV_CMD_VIDEO_VID_480P            0x0005
  144. #define PS3AV_CMD_VIDEO_VID_576P            0x0006
  145. #define PS3AV_CMD_VIDEO_VID_1080I_60HZ            0x0007
  146. #define PS3AV_CMD_VIDEO_VID_1080I_50HZ            0x0008
  147. #define PS3AV_CMD_VIDEO_VID_720P_60HZ            0x0009
  148. #define PS3AV_CMD_VIDEO_VID_720P_50HZ            0x000a
  149. #define PS3AV_CMD_VIDEO_VID_1080P_60HZ            0x000b
  150. #define PS3AV_CMD_VIDEO_VID_1080P_50HZ            0x000c
  151. #define PS3AV_CMD_VIDEO_VID_WXGA            0x000d
  152. #define PS3AV_CMD_VIDEO_VID_SXGA            0x000e
  153. #define PS3AV_CMD_VIDEO_VID_WUXGA            0x000f
  154. #define PS3AV_CMD_VIDEO_VID_480I_A            0x0010
  155. /* video_format */
  156. #define PS3AV_CMD_VIDEO_FORMAT_BLACK            0x0000
  157. #define PS3AV_CMD_VIDEO_FORMAT_ARGB_8BIT        0x0007
  158. /* video_order */
  159. #define PS3AV_CMD_VIDEO_ORDER_RGB            0x0000
  160. #define PS3AV_CMD_VIDEO_ORDER_BGR            0x0001
  161. /* video_fmt */
  162. #define PS3AV_CMD_VIDEO_FMT_X8R8G8B8            0x0000
  163. /* video_out_format */
  164. #define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT        0x0000
  165. /* video_cl_cnv */
  166. #define PS3AV_CMD_VIDEO_CL_CNV_ENABLE_LUT        0x0000
  167. #define PS3AV_CMD_VIDEO_CL_CNV_DISABLE_LUT        0x0010
  168. /* video_sync */
  169. #define PS3AV_CMD_VIDEO_SYNC_VSYNC            0x0001
  170. #define PS3AV_CMD_VIDEO_SYNC_CSYNC            0x0004
  171. #define PS3AV_CMD_VIDEO_SYNC_HSYNC            0x0010
  172.  
  173. /* for audio module */
  174. /* num_of_ch */
  175. #define PS3AV_CMD_AUDIO_NUM_OF_CH_2            0x0000
  176. #define PS3AV_CMD_AUDIO_NUM_OF_CH_3            0x0001
  177. #define PS3AV_CMD_AUDIO_NUM_OF_CH_4            0x0002
  178. #define PS3AV_CMD_AUDIO_NUM_OF_CH_5            0x0003
  179. #define PS3AV_CMD_AUDIO_NUM_OF_CH_6            0x0004
  180. #define PS3AV_CMD_AUDIO_NUM_OF_CH_7            0x0005
  181. #define PS3AV_CMD_AUDIO_NUM_OF_CH_8            0x0006
  182. /* audio_fs */
  183. #define PS3AV_CMD_AUDIO_FS_32K                0x0001
  184. #define PS3AV_CMD_AUDIO_FS_44K                0x0002
  185. #define PS3AV_CMD_AUDIO_FS_48K                0x0003
  186. #define PS3AV_CMD_AUDIO_FS_88K                0x0004
  187. #define PS3AV_CMD_AUDIO_FS_96K                0x0005
  188. #define PS3AV_CMD_AUDIO_FS_176K                0x0006
  189. #define PS3AV_CMD_AUDIO_FS_192K                0x0007
  190. /* audio_word_bits */
  191. #define PS3AV_CMD_AUDIO_WORD_BITS_16            0x0001
  192. #define PS3AV_CMD_AUDIO_WORD_BITS_20            0x0002
  193. #define PS3AV_CMD_AUDIO_WORD_BITS_24            0x0003
  194. /* audio_format */
  195. #define PS3AV_CMD_AUDIO_FORMAT_PCM            0x0001
  196. #define PS3AV_CMD_AUDIO_FORMAT_BITSTREAM        0x00ff
  197. /* audio_source */
  198. #define PS3AV_CMD_AUDIO_SOURCE_SERIAL            0x0000
  199. #define PS3AV_CMD_AUDIO_SOURCE_SPDIF            0x0001
  200. /* audio_swap */
  201. #define PS3AV_CMD_AUDIO_SWAP_0                0x0000
  202. #define PS3AV_CMD_AUDIO_SWAP_1                0x0000
  203. /* audio_map */
  204. #define PS3AV_CMD_AUDIO_MAP_OUTPUT_0            0x0000
  205. #define PS3AV_CMD_AUDIO_MAP_OUTPUT_1            0x0001
  206. #define PS3AV_CMD_AUDIO_MAP_OUTPUT_2            0x0002
  207. #define PS3AV_CMD_AUDIO_MAP_OUTPUT_3            0x0003
  208. /* audio_layout */
  209. #define PS3AV_CMD_AUDIO_LAYOUT_2CH            0x0000
  210. #define PS3AV_CMD_AUDIO_LAYOUT_6CH            0x000b    /* LREClr */
  211. #define PS3AV_CMD_AUDIO_LAYOUT_8CH            0x001f    /* LREClrXY */
  212. /* audio_downmix */
  213. #define PS3AV_CMD_AUDIO_DOWNMIX_PERMITTED        0x0000
  214. #define PS3AV_CMD_AUDIO_DOWNMIX_PROHIBITED        0x0001
  215.  
  216. /* audio_port */
  217. #define PS3AV_CMD_AUDIO_PORT_HDMI_0            ( 1 << 0 )
  218. #define PS3AV_CMD_AUDIO_PORT_HDMI_1            ( 1 << 1 )
  219. #define PS3AV_CMD_AUDIO_PORT_AVMULTI_0            ( 1 << 10 )
  220. #define PS3AV_CMD_AUDIO_PORT_SPDIF_0            ( 1 << 20 )
  221. #define PS3AV_CMD_AUDIO_PORT_SPDIF_1            ( 1 << 21 )
  222.  
  223. /* audio_ctrl_id */
  224. #define PS3AV_CMD_AUDIO_CTRL_ID_DAC_RESET        0x0000
  225. #define PS3AV_CMD_AUDIO_CTRL_ID_DAC_DE_EMPHASIS        0x0001
  226. #define PS3AV_CMD_AUDIO_CTRL_ID_AVCLK            0x0002
  227. /* audio_ctrl_data[0] reset */
  228. #define PS3AV_CMD_AUDIO_CTRL_RESET_NEGATE        0x0000
  229. #define PS3AV_CMD_AUDIO_CTRL_RESET_ASSERT        0x0001
  230. /* audio_ctrl_data[0] de-emphasis */
  231. #define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_OFF        0x0000
  232. #define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_ON        0x0001
  233. /* audio_ctrl_data[0] avclk */
  234. #define PS3AV_CMD_AUDIO_CTRL_AVCLK_22            0x0000
  235. #define PS3AV_CMD_AUDIO_CTRL_AVCLK_18            0x0001
  236.  
  237. /* av_vid */
  238. /* do not use these params directly, use vid_video2av */
  239. #define PS3AV_CMD_AV_VID_480I                0x0000
  240. #define PS3AV_CMD_AV_VID_480P                0x0001
  241. #define PS3AV_CMD_AV_VID_720P_60HZ            0x0002
  242. #define PS3AV_CMD_AV_VID_1080I_60HZ            0x0003
  243. #define PS3AV_CMD_AV_VID_1080P_60HZ            0x0004
  244. #define PS3AV_CMD_AV_VID_576I                0x0005
  245. #define PS3AV_CMD_AV_VID_576P                0x0006
  246. #define PS3AV_CMD_AV_VID_720P_50HZ            0x0007
  247. #define PS3AV_CMD_AV_VID_1080I_50HZ            0x0008
  248. #define PS3AV_CMD_AV_VID_1080P_50HZ            0x0009
  249. #define PS3AV_CMD_AV_VID_WXGA                0x000a
  250. #define PS3AV_CMD_AV_VID_SXGA                0x000b
  251. #define PS3AV_CMD_AV_VID_WUXGA                0x000c
  252. /* av_cs_out av_cs_in */
  253. /* use cs_video2av() */
  254. #define PS3AV_CMD_AV_CS_RGB_8                0x0000
  255. #define PS3AV_CMD_AV_CS_YUV444_8            0x0001
  256. #define PS3AV_CMD_AV_CS_YUV422_8            0x0002
  257. #define PS3AV_CMD_AV_CS_XVYCC_8                0x0003
  258. #define PS3AV_CMD_AV_CS_RGB_10                0x0004
  259. #define PS3AV_CMD_AV_CS_YUV444_10            0x0005
  260. #define PS3AV_CMD_AV_CS_YUV422_10            0x0006
  261. #define PS3AV_CMD_AV_CS_XVYCC_10            0x0007
  262. #define PS3AV_CMD_AV_CS_RGB_12                0x0008
  263. #define PS3AV_CMD_AV_CS_YUV444_12            0x0009
  264. #define PS3AV_CMD_AV_CS_YUV422_12            0x000a
  265. #define PS3AV_CMD_AV_CS_XVYCC_12            0x000b
  266. #define PS3AV_CMD_AV_CS_8                0x0000
  267. #define PS3AV_CMD_AV_CS_10                0x0001
  268. #define PS3AV_CMD_AV_CS_12                0x0002
  269. /* dither */
  270. #define PS3AV_CMD_AV_DITHER_OFF                0x0000
  271. #define PS3AV_CMD_AV_DITHER_ON                0x0001
  272. #define PS3AV_CMD_AV_DITHER_8BIT            0x0000
  273. #define PS3AV_CMD_AV_DITHER_10BIT            0x0002
  274. #define PS3AV_CMD_AV_DITHER_12BIT            0x0004
  275. /* super_white */
  276. #define PS3AV_CMD_AV_SUPER_WHITE_OFF            0x0000
  277. #define PS3AV_CMD_AV_SUPER_WHITE_ON            0x0001
  278. /* aspect */
  279. #define PS3AV_CMD_AV_ASPECT_16_9            0x0000
  280. #define PS3AV_CMD_AV_ASPECT_4_3                0x0001
  281. /* video_cs_cnv() */
  282. #define PS3AV_CMD_VIDEO_CS_RGB                0x0001
  283. #define PS3AV_CMD_VIDEO_CS_YUV422            0x0002
  284. #define PS3AV_CMD_VIDEO_CS_YUV444            0x0003
  285.  
  286. /* for broadcast automode */
  287. #define PS3AV_RESBIT_720x480P            0x0003    /* 0x0001 | 0x0002 */
  288. #define PS3AV_RESBIT_720x576P            0x0003    /* 0x0001 | 0x0002 */
  289. #define PS3AV_RESBIT_1280x720P            0x0004
  290. #define PS3AV_RESBIT_1920x1080I            0x0008
  291. #define PS3AV_RESBIT_1920x1080P            0x4000
  292. #define PS3AV_RES_MASK_60            (PS3AV_RESBIT_720x480P \
  293.                         | PS3AV_RESBIT_1280x720P \
  294.                         | PS3AV_RESBIT_1920x1080I \
  295.                         | PS3AV_RESBIT_1920x1080P)
  296. #define PS3AV_RES_MASK_50            (PS3AV_RESBIT_720x576P \
  297.                         | PS3AV_RESBIT_1280x720P \
  298.                         | PS3AV_RESBIT_1920x1080I \
  299.                         | PS3AV_RESBIT_1920x1080P)
  300.  
  301. /* for VESA automode */
  302. #define PS3AV_RESBIT_VGA            0x0001
  303. #define PS3AV_RESBIT_WXGA            0x0002
  304. #define PS3AV_RESBIT_SXGA            0x0004
  305. #define PS3AV_RESBIT_WUXGA            0x0008
  306. #define PS3AV_RES_MASK_VESA            (PS3AV_RESBIT_WXGA |\
  307.                          PS3AV_RESBIT_SXGA |\
  308.                          PS3AV_RESBIT_WUXGA)
  309.  
  310. #define PS3AV_MONITOR_TYPE_HDMI            1    /* HDMI */
  311. #define PS3AV_MONITOR_TYPE_DVI            2    /* DVI */
  312.  
  313.  
  314. /* for video mode */
  315. enum ps3av_mode_num {
  316.     PS3AV_MODE_AUTO                = 0,
  317.     PS3AV_MODE_480I                = 1,
  318.     PS3AV_MODE_480P                = 2,
  319.     PS3AV_MODE_720P60            = 3,
  320.     PS3AV_MODE_1080I60            = 4,
  321.     PS3AV_MODE_1080P60            = 5,
  322.     PS3AV_MODE_576I                = 6,
  323.     PS3AV_MODE_576P                = 7,
  324.     PS3AV_MODE_720P50            = 8,
  325.     PS3AV_MODE_1080I50            = 9,
  326.     PS3AV_MODE_1080P50            = 10,
  327.     PS3AV_MODE_WXGA                = 11,
  328.     PS3AV_MODE_SXGA                = 12,
  329.     PS3AV_MODE_WUXGA            = 13,
  330. };
  331.  
  332. #define PS3AV_MODE_MASK                0x000F
  333. #define PS3AV_MODE_HDCP_OFF            0x1000    /* Retail PS3 product doesn't support this */
  334. #define PS3AV_MODE_DITHER            0x0800
  335. #define PS3AV_MODE_COLOR            0x0400
  336. #define PS3AV_MODE_WHITE            0x0200
  337. #define PS3AV_MODE_FULL                0x0080
  338. #define PS3AV_MODE_DVI                0x0040
  339. #define PS3AV_MODE_RGB                0x0020
  340.  
  341.  
  342. #define PS3AV_DEFAULT_HDMI_MODE_ID_REG_60    PS3AV_MODE_480P
  343. #define PS3AV_DEFAULT_AVMULTI_MODE_ID_REG_60    PS3AV_MODE_480I
  344. #define PS3AV_DEFAULT_HDMI_MODE_ID_REG_50    PS3AV_MODE_576P
  345. #define PS3AV_DEFAULT_AVMULTI_MODE_ID_REG_50    PS3AV_MODE_576I
  346.  
  347. #define PS3AV_REGION_60                0x01
  348. #define PS3AV_REGION_50                0x02
  349. #define PS3AV_REGION_RGB            0x10
  350.  
  351. #define get_status(buf)                (((__u32 *)buf)[2])
  352. #define PS3AV_HDR_SIZE                4    /* version + size */
  353.  
  354.  
  355. /** command packet structure **/
  356. struct ps3av_send_hdr {
  357.     u16 version;
  358.     u16 size;        /* size of command packet */
  359.     u32 cid;        /* command id */
  360. };
  361.  
  362. struct ps3av_reply_hdr {
  363.     u16 version;
  364.     u16 size;
  365.     u32 cid;
  366.     u32 status;
  367. };
  368.  
  369. /* backend: initialization */
  370. struct ps3av_pkt_av_init {
  371.     struct ps3av_send_hdr send_hdr;
  372.     u32 event_bit;
  373. };
  374.  
  375. /* backend: finalize */
  376. struct ps3av_pkt_av_fin {
  377.     struct ps3av_send_hdr send_hdr;
  378.     /* recv */
  379.     u32 reserved;
  380. };
  381.  
  382. /* backend: get port */
  383. struct ps3av_pkt_av_get_hw_conf {
  384.     struct ps3av_send_hdr send_hdr;
  385.     /* recv */
  386.     u32 status;
  387.     u16 num_of_hdmi;    /* out: number of hdmi */
  388.     u16 num_of_avmulti;    /* out: number of avmulti */
  389.     u16 num_of_spdif;    /* out: number of hdmi */
  390.     u16 reserved;
  391. };
  392.  
  393. /* backend: get monitor info */
  394. struct ps3av_info_resolution {
  395.     u32 res_bits;
  396.     u32 native;
  397. };
  398.  
  399. struct ps3av_info_cs {
  400.     u8 rgb;
  401.     u8 yuv444;
  402.     u8 yuv422;
  403.     u8 reserved;
  404. };
  405.  
  406. struct ps3av_info_color {
  407.     u16 red_x;
  408.     u16 red_y;
  409.     u16 green_x;
  410.     u16 green_y;
  411.     u16 blue_x;
  412.     u16 blue_y;
  413.     u16 white_x;
  414.     u16 white_y;
  415.     u32 gamma;
  416. };
  417.  
  418. struct ps3av_info_audio {
  419.     u8 type;
  420.     u8 max_num_of_ch;
  421.     u8 fs;
  422.     u8 sbit;
  423. };
  424.  
  425. struct ps3av_info_monitor {
  426.     u8 avport;
  427.     u8 monitor_id[10];
  428.     u8 monitor_type;
  429.     u8 monitor_name[16];
  430.     struct ps3av_info_resolution res_60;
  431.     struct ps3av_info_resolution res_50;
  432.     struct ps3av_info_resolution res_other;
  433.     struct ps3av_info_resolution res_vesa;
  434.     struct ps3av_info_cs cs;
  435.     struct ps3av_info_color color;
  436.     u8 supported_ai;
  437.     u8 speaker_info;
  438.     u8 num_of_audio_block;
  439.     struct ps3av_info_audio audio[0];    /* 0 or more audio blocks */
  440.     u8 reserved[169];
  441. } __attribute__ ((packed));
  442.  
  443. struct ps3av_pkt_av_get_monitor_info {
  444.     struct ps3av_send_hdr send_hdr;
  445.     u16 avport;        /* in: avport */
  446.     u16 reserved;
  447.     /* recv */
  448.     struct ps3av_info_monitor info;    /* out: monitor info */
  449. };
  450.  
  451. /* backend: enable/disable event */
  452. struct ps3av_pkt_av_event {
  453.     struct ps3av_send_hdr send_hdr;
  454.     u32 event_bit;        /* in */
  455. };
  456.  
  457. /* backend: video cs param */
  458. struct ps3av_pkt_av_video_cs {
  459.     struct ps3av_send_hdr send_hdr;
  460.     u16 avport;        /* in: avport */
  461.     u16 av_vid;        /* in: video resolution */
  462.     u16 av_cs_out;        /* in: output color space */
  463.     u16 av_cs_in;        /* in: input color space */
  464.     u8 dither;        /* in: dither bit length */
  465.     u8 bitlen_out;        /* in: bit length */
  466.     u8 super_white;        /* in: super white */
  467.     u8 aspect;        /* in: aspect ratio */
  468. };
  469.  
  470. /* backend: video mute */
  471. struct ps3av_av_mute {
  472.     u16 avport;        /* in: avport */
  473.     u16 mute;        /* in: mute on/off */
  474. };
  475.  
  476. struct ps3av_pkt_av_video_mute {
  477.     struct ps3av_send_hdr send_hdr;
  478.     struct ps3av_av_mute mute[PS3AV_MUTE_PORT_MAX];
  479. };
  480.  
  481. /* backend: video disable signal */
  482. struct ps3av_pkt_av_video_disable_sig {
  483.     struct ps3av_send_hdr send_hdr;
  484.     u16 avport;        /* in: avport */
  485.     u16 reserved;
  486. };
  487.  
  488. /* backend: audio param */
  489. struct ps3av_audio_info_frame {
  490.     struct pb1_bit {
  491.         u8 ct:4;
  492.         u8 rsv:1;
  493.         u8 cc:3;
  494.     } pb1;
  495.     struct pb2_bit {
  496.         u8 rsv:3;
  497.         u8 sf:3;
  498.         u8 ss:2;
  499.     } pb2;
  500.     u8 pb3;
  501.     u8 pb4;
  502.     struct pb5_bit {
  503.         u8 dm:1;
  504.         u8 lsv:4;
  505.         u8 rsv:3;
  506.     } pb5;
  507. };
  508.  
  509. struct ps3av_pkt_av_audio_param {
  510.     struct ps3av_send_hdr send_hdr;
  511.     u16 avport;        /* in: avport */
  512.     u16 reserved;
  513.     u8 mclk;        /* in: audio mclk */
  514.     u8 ns[3];        /* in: audio ns val */
  515.     u8 enable;        /* in: audio enable */
  516.     u8 swaplr;        /* in: audio swap */
  517.     u8 fifomap;        /* in: audio fifomap */
  518.     u8 inputctrl;        /* in: audio input ctrl */
  519.     u8 inputlen;        /* in: sample bit size */
  520.     u8 layout;        /* in: speaker layout param */
  521.     struct ps3av_audio_info_frame info;    /* in: info */
  522.     u8 chstat[5];        /* in: ch stat */
  523. };
  524.  
  525. /* backend: audio_mute */
  526. struct ps3av_pkt_av_audio_mute {
  527.     struct ps3av_send_hdr send_hdr;
  528.     struct ps3av_av_mute mute[PS3AV_MUTE_PORT_MAX];
  529. };
  530.  
  531. /* backend: hdmi_mode */
  532. struct ps3av_pkt_av_hdmi_mode {
  533.     struct ps3av_send_hdr send_hdr;
  534.     u8 mode;        /* in: hdmi_mode */
  535.     u8 reserved0;
  536.     u8 reserved1;
  537.     u8 reserved2;
  538. };
  539.  
  540. /* backend: tv_mute */
  541. struct ps3av_pkt_av_tv_mute {
  542.     struct ps3av_send_hdr send_hdr;
  543.     u16 avport;        /* in: avport HDMI only */
  544.     u16 mute;        /* in: mute */
  545. };
  546.  
  547. /* video: initialize */
  548. struct ps3av_pkt_video_init {
  549.     struct ps3av_send_hdr send_hdr;
  550.     /* recv */
  551.     u32 reserved;
  552. };
  553.  
  554. /* video: mode setting */
  555. struct ps3av_pkt_video_mode {
  556.     struct ps3av_send_hdr send_hdr;
  557.     u32 video_head;        /* in: head */
  558.     u32 reserved;
  559.     u32 video_vid;        /* in: video resolution */
  560.     u16 reserved1;
  561.     u16 width;        /* in: width in pixel */
  562.     u16 reserved2;
  563.     u16 height;        /* in: height in pixel */
  564.     u32 pitch;        /* in: line size in byte */
  565.     u32 video_out_format;    /* in: out format */
  566.     u32 video_format;    /* in: input frame buffer format */
  567.     u8 reserved3;
  568.     u8 video_cl_cnv;    /* in: color conversion */
  569.     u16 video_order;    /* in: input RGB order */
  570.     u32 reserved4;
  571. };
  572.  
  573. /* video: format */
  574. struct ps3av_pkt_video_format {
  575.     struct ps3av_send_hdr send_hdr;
  576.     u32 video_head;        /* in: head */
  577.     u32 video_format;    /* in: frame buffer format */
  578.     u8 reserved;
  579.     u8 video_cl_cnv;    /* in: color conversion */
  580.     u16 video_order;    /* in: input RGB order */
  581. };
  582.  
  583. /* video: pitch */
  584. struct ps3av_pkt_video_pitch {
  585.     u16 version;
  586.     u16 size;        /* size of command packet */
  587.     u32 cid;        /* command id */
  588.     u32 video_head;        /* in: head */
  589.     u32 pitch;        /* in: line size in byte */
  590. };
  591.  
  592. /* audio: initialize */
  593. struct ps3av_pkt_audio_init {
  594.     struct ps3av_send_hdr send_hdr;
  595.     /* recv */
  596.     u32 reserved;
  597. };
  598.  
  599. /* audio: mode setting */
  600. struct ps3av_pkt_audio_mode {
  601.     struct ps3av_send_hdr send_hdr;
  602.     u8 avport;        /* in: avport */
  603.     u8 reserved0[3];
  604.     u32 mask;        /* in: mask */
  605.     u32 audio_num_of_ch;    /* in: number of ch */
  606.     u32 audio_fs;        /* in: sampling freq */
  607.     u32 audio_word_bits;    /* in: sample bit size */
  608.     u32 audio_format;    /* in: audio output format */
  609.     u32 audio_source;    /* in: audio source */
  610.     u8 audio_enable[4];    /* in: audio enable */
  611.     u8 audio_swap[4];    /* in: audio swap */
  612.     u8 audio_map[4];    /* in: audio map */
  613.     u32 audio_layout;    /* in: speaker layout */
  614.     u32 audio_downmix;    /* in: audio downmix permission */
  615.     u32 audio_downmix_level;
  616.     u8 audio_cs_info[8];    /* in: IEC channel status */
  617. };
  618.  
  619. /* audio: mute */
  620. struct ps3av_audio_mute {
  621.     u8 avport;        /* in: opt_port optical */
  622.     u8 reserved[3];
  623.     u32 mute;        /* in: mute */
  624. };
  625.  
  626. struct ps3av_pkt_audio_mute {
  627.     struct ps3av_send_hdr send_hdr;
  628.     struct ps3av_audio_mute mute[PS3AV_OPT_PORT_MAX];
  629. };
  630.  
  631. /* audio: active/inactive */
  632. struct ps3av_pkt_audio_active {
  633.     struct ps3av_send_hdr send_hdr;
  634.     u32 audio_port;        /* in: audio active/inactive port */
  635. };
  636.  
  637. /* audio: SPDIF user bit */
  638. struct ps3av_pkt_audio_spdif_bit {
  639.     u16 version;
  640.     u16 size;        /* size of command packet */
  641.     u32 cid;        /* command id */
  642.     u8 avport;        /* in: avport SPDIF only */
  643.     u8 reserved[3];
  644.     u32 audio_port;        /* in: SPDIF only */
  645.     u32 spdif_bit_data[12];    /* in: user bit data */
  646. };
  647.  
  648. /* audio: audio control */
  649. struct ps3av_pkt_audio_ctrl {
  650.     u16 version;
  651.     u16 size;        /* size of command packet */
  652.     u32 cid;        /* command id */
  653.     u32 audio_ctrl_id;    /* in: control id */
  654.     u32 audio_ctrl_data[4];    /* in: control data */
  655. };
  656.  
  657. /* avb:param */
  658. #define PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE    \
  659.     (PS3AV_AVB_NUM_VIDEO*sizeof(struct ps3av_pkt_video_mode) + \
  660.      PS3AV_AVB_NUM_AUDIO*sizeof(struct ps3av_pkt_audio_mode) + \
  661.      PS3AV_AVB_NUM_AV_VIDEO*sizeof(struct ps3av_pkt_av_video_cs) + \
  662.      PS3AV_AVB_NUM_AV_AUDIO*sizeof(struct ps3av_pkt_av_audio_param))
  663.  
  664. struct ps3av_pkt_avb_param {
  665.     struct ps3av_send_hdr send_hdr;
  666.     u16 num_of_video_pkt;
  667.     u16 num_of_audio_pkt;
  668.     u16 num_of_av_video_pkt;
  669.     u16 num_of_av_audio_pkt;
  670.     /*
  671.      * The actual buffer layout depends on the fields above:
  672.      *
  673.      * struct ps3av_pkt_video_mode video[num_of_video_pkt];
  674.      * struct ps3av_pkt_audio_mode audio[num_of_audio_pkt];
  675.      * struct ps3av_pkt_av_video_cs av_video[num_of_av_video_pkt];
  676.      * struct ps3av_pkt_av_audio_param av_audio[num_of_av_audio_pkt];
  677.      */
  678.     u8 buf[PS3AV_PKT_AVB_PARAM_MAX_BUF_SIZE];
  679. };
  680.  
  681. /* channel status */
  682. extern u8 ps3av_mode_cs_info[];
  683.  
  684. /** command status **/
  685. #define PS3AV_STATUS_SUCCESS            0x0000    /* success */
  686. #define PS3AV_STATUS_RECEIVE_VUART_ERROR    0x0001    /* receive vuart error */
  687. #define PS3AV_STATUS_SYSCON_COMMUNICATE_FAIL    0x0002    /* syscon communication error */
  688. #define PS3AV_STATUS_INVALID_COMMAND        0x0003    /* obsolete invalid CID */
  689. #define PS3AV_STATUS_INVALID_PORT        0x0004    /* invalid port number */
  690. #define PS3AV_STATUS_INVALID_VID        0x0005    /* invalid video format */
  691. #define PS3AV_STATUS_INVALID_COLOR_SPACE    0x0006    /* invalid video colose space */
  692. #define PS3AV_STATUS_INVALID_FS            0x0007    /* invalid audio sampling freq */
  693. #define PS3AV_STATUS_INVALID_AUDIO_CH        0x0008    /* invalid audio channel number */
  694. #define PS3AV_STATUS_UNSUPPORTED_VERSION    0x0009    /* version mismatch  */
  695. #define PS3AV_STATUS_INVALID_SAMPLE_SIZE    0x000a    /* invalid audio sample bit size */
  696. #define PS3AV_STATUS_FAILURE            0x000b    /* other failures */
  697. #define PS3AV_STATUS_UNSUPPORTED_COMMAND    0x000c    /* unsupported cid */
  698. #define PS3AV_STATUS_BUFFER_OVERFLOW        0x000d    /* write buffer overflow */
  699. #define PS3AV_STATUS_INVALID_VIDEO_PARAM    0x000e    /* invalid video param */
  700. #define PS3AV_STATUS_NO_SEL            0x000f    /* not exist selector */
  701. #define PS3AV_STATUS_INVALID_AV_PARAM        0x0010    /* invalid backend param */
  702. #define PS3AV_STATUS_INVALID_AUDIO_PARAM    0x0011    /* invalid audio param */
  703. #define PS3AV_STATUS_UNSUPPORTED_HDMI_MODE    0x0012    /* unsupported hdmi mode */
  704. #define PS3AV_STATUS_NO_SYNC_HEAD        0x0013    /* sync head failed */
  705.  
  706. extern void ps3av_set_hdr(u32, u16, struct ps3av_send_hdr *);
  707. extern int ps3av_do_pkt(u32, u16, size_t, struct ps3av_send_hdr *);
  708.  
  709. extern int ps3av_cmd_init(void);
  710. extern int ps3av_cmd_fin(void);
  711. extern int ps3av_cmd_av_video_mute(int, u32 *, u32);
  712. extern int ps3av_cmd_av_video_disable_sig(u32);
  713. extern int ps3av_cmd_av_tv_mute(u32, u32);
  714. extern int ps3av_cmd_enable_event(void);
  715. extern int ps3av_cmd_av_hdmi_mode(u8);
  716. extern u32 ps3av_cmd_set_av_video_cs(void *, u32, int, int, int, u32);
  717. extern u32 ps3av_cmd_set_video_mode(void *, u32, int, int, u32);
  718. extern int ps3av_cmd_video_format_black(u32, u32, u32);
  719. extern int ps3av_cmd_av_audio_mute(int, u32 *, u32);
  720. extern u32 ps3av_cmd_set_av_audio_param(void *, u32,
  721.                     const struct ps3av_pkt_audio_mode *,
  722.                     u32);
  723. extern void ps3av_cmd_set_audio_mode(struct ps3av_pkt_audio_mode *, u32, u32,
  724.                      u32, u32, u32, u32);
  725. extern int ps3av_cmd_audio_mode(struct ps3av_pkt_audio_mode *);
  726. extern int ps3av_cmd_audio_mute(int, u32 *, u32);
  727. extern int ps3av_cmd_audio_active(int, u32);
  728. extern int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *, u32);
  729. extern int ps3av_cmd_av_get_hw_conf(struct ps3av_pkt_av_get_hw_conf *);
  730. extern int ps3av_cmd_video_get_monitor_info(struct ps3av_pkt_av_get_monitor_info *,
  731.                         u32);
  732.  
  733. extern int ps3av_set_video_mode(u32);
  734. extern int ps3av_set_audio_mode(u32, u32, u32, u32, u32);
  735. extern int ps3av_get_auto_mode(void);
  736. extern int ps3av_get_mode(void);
  737. extern int ps3av_video_mode2res(u32, u32 *, u32 *);
  738. extern int ps3av_video_mute(int);
  739. extern int ps3av_audio_mute(int);
  740. extern int ps3av_audio_mute_analog(int);
  741. extern int ps3av_dev_open(void);
  742. extern int ps3av_dev_close(void);
  743. extern void ps3av_register_flip_ctl(void (*flip_ctl)(int on, void *data),
  744.                     void *flip_data);
  745. extern void ps3av_flip_ctl(int on);
  746.  
  747. #endif    /* _ASM_POWERPC_PS3AV_H_ */
  748.