| /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ |
| /* |
| * Copyright (c) 2019 Amlogic, Inc. All rights reserved. |
| */ |
| |
| #ifndef __HDMIRX_PKT_INFO_H__ |
| #define __HDMIRX_PKT_INFO_H__ |
| |
| #include <linux/workqueue.h> |
| #include <linux/amlogic/media/registers/cpu_version.h> |
| |
| #define K_ONEPKT_BUFF_SIZE 8 |
| #define K_PKT_REREAD_SIZE 2 |
| |
| #define K_FLAG_TAB_END 0xa0a05f5f |
| |
| #define VSIF_PKT_READ_FROM_PD_FIFO |
| |
| #define IEEE_VSI14 0x000c03 |
| #define IEEE_DV15 0x00d046 |
| #define IEEE_VSI21 0xc45dd8 |
| #define IEEE_HDR10PLUS 0x90848b |
| |
| #define VSIF_TYPE_DV15 1 |
| #define VSIF_TYPE_HDR10P 2 |
| #define VSIF_TYPE_HDMI21 4 |
| #define VSIF_TYPE_HDMI14 8 |
| |
| #define EMP_TYPE_VSIF 1 |
| #define EMP_TYPE_VTEM 2 |
| #define EMP_TYPE_HDR 3 |
| |
| #define DV_NULL 0 |
| #define DV_VSIF 1 |
| #define DV_EMP 2 |
| |
| enum vsi_state_e { |
| E_VSI_NULL, |
| E_VSI_4K3D, |
| E_VSI_VSI21, |
| E_VSI_HDR10PLUS, |
| E_VSI_DV10, |
| E_VSI_DV15 |
| }; |
| |
| enum pkt_length_e { |
| E_PKT_LENGTH_4 = 0x04, |
| E_PKT_LENGTH_5 = 0x05, |
| E_PKT_LENGTH_24 = 0x18, |
| E_PKT_LENGTH_27 = 0x1B |
| }; |
| |
| enum pkt_decode_type { |
| PKT_BUFF_SET_FIFO = 0x01, |
| PKT_BUFF_SET_GMD = 0x02, |
| PKT_BUFF_SET_AIF = 0x04, |
| PKT_BUFF_SET_AVI = 0x08, |
| PKT_BUFF_SET_ACR = 0x10, |
| PKT_BUFF_SET_GCP = 0x20, |
| PKT_BUFF_SET_VSI = 0x40, |
| PKT_BUFF_SET_AMP = 0x80, |
| PKT_BUFF_SET_DRM = 0x100, |
| PKT_BUFF_SET_NVBI = 0x200, |
| PKT_BUFF_SET_EMP = 0x400, |
| |
| PKT_BUFF_SET_UNKNOWN = 0xffff, |
| }; |
| |
| /* data island packet type define */ |
| enum pkt_type_e { |
| PKT_TYPE_NULL = 0x0, |
| PKT_TYPE_ACR = 0x1, |
| /*PKT_TYPE_AUD_SAMPLE = 0x2,*/ |
| PKT_TYPE_GCP = 0x3, |
| PKT_TYPE_ACP = 0x4, |
| PKT_TYPE_ISRC1 = 0x5, |
| PKT_TYPE_ISRC2 = 0x6, |
| /*PKT_TYPE_1BIT_AUD = 0x7,*/ |
| /*PKT_TYPE_DST_AUD = 0x8,*/ |
| /*PKT_TYPE_HBIT_AUD = 0x9,*/ |
| PKT_TYPE_GAMUT_META = 0xa, |
| /*PKT_TYPE_3DAUD = 0xb,*/ |
| /*PKT_TYPE_1BIT3D_AUD = 0xc,*/ |
| PKT_TYPE_AUD_META = 0xd, |
| /*PKT_TYPE_MUL_AUD = 0xe,*/ |
| /*PKT_TYPE_1BITMUL_AUD = 0xf,*/ |
| |
| PKT_TYPE_INFOFRAME_VSI = 0x81, |
| PKT_TYPE_INFOFRAME_AVI = 0x82, |
| PKT_TYPE_INFOFRAME_SPD = 0x83, |
| PKT_TYPE_INFOFRAME_AUD = 0x84, |
| PKT_TYPE_INFOFRAME_MPEGSRC = 0x85, |
| PKT_TYPE_INFOFRAME_NVBI = 0x86, |
| PKT_TYPE_INFOFRAME_DRM = 0x87, |
| PKT_TYPE_EMP = 0x7f, |
| |
| PKT_TYPE_UNKNOWN, |
| }; |
| |
| enum pkt_op_flag { |
| /*infoframe type*/ |
| PKT_OP_VSI = 0x01, |
| PKT_OP_AVI = 0x02, |
| PKT_OP_SPD = 0x04, |
| PKT_OP_AIF = 0x08, |
| |
| PKT_OP_MPEGS = 0x10, |
| PKT_OP_NVBI = 0x20, |
| PKT_OP_DRM = 0x40, |
| PKT_OP_EMP = 0x80, |
| |
| PKT_OP_ACR = 0x100, |
| PKT_OP_GCP = 0x200, |
| PKT_OP_ACP = 0x400, |
| PKT_OP_ISRC1 = 0x800, |
| |
| PKT_OP_ISRC2 = 0x1000, |
| PKT_OP_GMD = 0x2000, |
| PKT_OP_AMP = 0x4000, |
| }; |
| |
| struct pkt_typeregmap_st { |
| u32 pkt_type; |
| u32 reg_bit; |
| }; |
| |
| /* audio clock regeneration pkt - 0x1 */ |
| struct acr_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| u8 zero0; |
| u8 zero1; |
| u8 rsvd; |
| /*sub packet 1*/ |
| struct sbpkt1_st { |
| /*subpacket*/ |
| u8 SB0; |
| u8 SB1_CTS_H:4; |
| u8 SB1_rev:4; |
| u8 SB2_CTS_M; |
| u8 SB3_CTS_L; |
| |
| u8 SB4_N_H:4; |
| u8 SB4_rev:4; |
| u8 SB5_N_M; |
| u8 SB6_N_L; |
| } sbpkt1; |
| /*sub packet 2*/ |
| struct sbpkt2_st { |
| /*subpacket*/ |
| u8 SB0; |
| u8 SB1_CTS_H:4; |
| u8 SB1_rev:4; |
| u8 SB2_CTS_M; |
| u8 SB3_CTS_L; |
| |
| u8 SB4_N_H:4; |
| u8 SB4_rev:4; |
| u8 SB5_N_M; |
| u8 SB6_N_L; |
| } sbpkt2; |
| /*sub packet 3*/ |
| struct sbpkt3_st { |
| /*subpacket*/ |
| u8 SB0; |
| u8 SB1_CTS_H:4; |
| u8 SB1_rev:4; |
| u8 SB2_CTS_M; |
| u8 SB3_CTS_L; |
| |
| u8 SB4_N_H:4; |
| u8 SB4_rev:4; |
| u8 SB5_N_M; |
| u8 SB6_N_L; |
| } sbpkt3; |
| /*sub packet 4*/ |
| struct sbpkt4_st { |
| /*subpacket*/ |
| u8 SB0; |
| u8 SB1_CTS_H:4; |
| u8 SB1_rev:4; |
| u8 SB2_CTS_M; |
| u8 SB3_CTS_L; |
| |
| u8 SB4_N_H:4; |
| u8 SB4_rev:4; |
| u8 SB5_N_M; |
| u8 SB6_N_L; |
| } sbpkt4; |
| }; |
| |
| /* audio sample pkt - 0x2 */ |
| struct aud_sample_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*HB1*/ |
| u8 sample_present:4; |
| u8 layout:1; |
| u8 hb1_rev:3; |
| /*HB2*/ |
| u8 sample_flat:4; |
| u8 b:4; |
| u8 rsvd; |
| struct aud_smpsbpkt_st { |
| /*subpacket*/ |
| u32 left_27_4:24; |
| u32 right_27_4:24; |
| /*valid bit from first sub-frame*/ |
| u32 valid_l:1; |
| /*user data bit from first sub-frame*/ |
| u32 user_l:1; |
| /*channel status bit from first sub-frame*/ |
| u32 channel_l:1; |
| /*parity bit from first sub-frame*/ |
| u32 parity_l:1; |
| /*valid bit from second sub-frame*/ |
| u32 valid_r:1; |
| /*user data bit from second sub-frame*/ |
| u32 user_r:1; |
| /*channel status bit from second sub-frame*/ |
| u32 channel_r:1; |
| /*parity bit from second sub-frame*/ |
| u32 parity_r:1; |
| } sbpkt; |
| }; |
| |
| /* general control pkt - 0x3 */ |
| struct gcp_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| u8 hb1_zero; |
| u8 hb2_zero; |
| u8 rsvd; |
| /*sub packet*/ |
| struct gcp_sbpkt_st { |
| /*SB0*/ |
| u8 set_avmute:1; |
| u8 sb0_zero0:3; |
| u8 clr_avmute:1; |
| u8 sb0_zero1:3; |
| /*SB1*/ |
| u8 colordepth:4; |
| u8 pixelpkgphase:4; |
| /*SB2*/ |
| u8 def_phase:1; |
| u8 sb2_zero:7; |
| /*SB3*/ |
| u8 sb3_zero; |
| /*SB4*/ |
| u8 sb4_zero; |
| /*SB5*/ |
| u8 sb5_zero; |
| /*SB6*/ |
| u8 sb6_zero; |
| } sbpkt; |
| }; |
| |
| /* acp control pkt - 0x4 */ |
| struct acp_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| u8 acp_type; |
| u8 rev; |
| u8 rsvd; |
| struct acp_sbpkt_st { |
| /*depend on acp_type,section 9.3 for detail*/ |
| u8 pb[28]; |
| } sbpkt_st; |
| }; |
| |
| /* ISRC1 pkt - 0x50 and x06 */ |
| struct isrc_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| u8 isrc_sts:3; |
| u8 hb1_rev:3; |
| u8 isrc_valid:1; |
| u8 isrc_cont:1; |
| u8 hb2_rev; |
| u8 rsvd; |
| /*sub-pkt section 8.2 for detail*/ |
| struct isrc_sbpkt_st { |
| /*UPC_EAN_ISRC 0-15*/ |
| /*UPC_EAN_ISRC 16-32*/ |
| u8 upc_ean_isrc[16]; |
| u8 rev[12]; |
| } sbpkt; |
| }; |
| |
| /* one bit audio sample pkt - 0x7 */ |
| struct obasmp_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*HB1*/ |
| u8 samples_presents_sp_x:4; |
| u8 layout:1; |
| u8 hb1_rev:3; |
| /*HB2*/ |
| u8 samples_invalid_sp_x:4; |
| u8 hb2_rev:4; |
| u8 rsvd; |
| /*subpacket*/ |
| struct oba_sbpkt_st { |
| u8 cha_part0_7; |
| u8 cha_part8_15; |
| u8 cha_part16_23; |
| u8 chb_part0_7; |
| u8 chb_part8_15; |
| u8 chb_part16_23; |
| u8 cha_part24_27:4; |
| u8 chb_part24_27:4; |
| } sbpkt; |
| }; |
| |
| /* DST audio pkt - 0x8 */ |
| struct dstaud_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*HB1*/ |
| u8 dst_normal_double:1; |
| u8 hb1_rsvd:5; |
| u8 sample_invalid:1; |
| u8 frame_start:1; |
| /*HB2*/ |
| u8 hb2_rsvd; |
| u8 rsvd; |
| struct dts_subpkt_st { |
| u8 data[28]; |
| } sbpkt; |
| }; |
| |
| /* hbr audio pkt - 0x9 */ |
| struct hbraud_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*HB1*/ |
| u8 hb1_rsvd; |
| /*HB2*/ |
| u8 hb2_rsvd:4; |
| u8 bx:4; |
| |
| u8 rsvd; |
| /*subpacket*/ |
| /*null*/ |
| }; |
| |
| /* gamut metadata pkt - 0xa */ |
| struct gamutmeta_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*HB1*/ |
| u8 affect_seq_num:4; |
| u8 gbd_profile:3; |
| u8 next_feild:1; |
| /*HB2*/ |
| u8 cur_seq_num:4; |
| u8 pkt_seq:2; |
| u8 hb2_rsvd:1; |
| u8 no_cmt_gbd:1; |
| u8 rsvd; |
| /*subpacket*/ |
| union gamut_sbpkt_e { |
| u8 p0_gbd_byte[28]; |
| struct p1_profile_st { |
| u8 gbd_length_h; |
| u8 gbd_length_l; |
| u8 checksum; |
| u8 gbd_byte_l[25]; |
| } p1_profile; |
| u8 p1_gbd_byte_h[28]; |
| } sbpkt; |
| }; |
| |
| /* 3d audio sample pkt - 0xb */ |
| struct a3dsmp_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*hb1*/ |
| u8 sample_presents:4; |
| u8 sample_start:1; |
| u8 hb1_rsvd:3; |
| /*hb2*/ |
| u8 sample_flat_sp:4; |
| u8 b_x:4; |
| |
| u8 rsvd; |
| /*audio sub-packet*/ |
| struct aud3d_sbpkt_st { |
| u32 left_27_4:24; |
| u32 right_27_4:24; |
| /*valid bit from first sub-frame*/ |
| u8 valid_l:1; |
| /*user data bit from first sub-frame*/ |
| u8 user_l:1; |
| /*channel status bit from first sub-frame*/ |
| u8 channel_l:1; |
| /*parity bit from first sub-frame*/ |
| u8 parity_l:1; |
| /*valid bit from second sub-frame*/ |
| u8 valid_r:1; |
| /*user data bit from second sub-frame*/ |
| u8 user_r:1; |
| /*channel status bit from second sub-frame*/ |
| u8 channel_r:1; |
| /*parity bit from second sub-frame*/ |
| u8 parity_r:1; |
| } sbpkt; |
| }; |
| |
| /* one bit 3d audio sample pkt - 0xc */ |
| struct ob3d_smppkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*hb1*/ |
| u8 samples_present_sp_x:4; |
| u8 sample_start:1; |
| u8 hb1_rsvd:3; |
| /*hb2*/ |
| u8 samples_invalid_sp_x:4; |
| u8 hb2_rsvd:4; |
| u8 rsvd; |
| /*subpacket*/ |
| struct ob_sbpkt { |
| u8 cha_part0_7; |
| u8 cha_part8_15; |
| u8 cha_part16_23; |
| u8 chb_part0_7; |
| u8 chb_part8_15; |
| u8 chb_part16_23; |
| u8 cha_part24_27:4; |
| u8 chb_part24_27:4; |
| } sbpkt; |
| }; |
| |
| /* audio metadata pkt - 0xd */ |
| struct audmtdata_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*hb1*/ |
| u8 audio_3d:1; |
| u8 hb1_rsvd:7; |
| /*hb2*/ |
| u8 num_view:2; |
| u8 num_audio_str:2; |
| u8 hb2_rsvd:4; |
| |
| u8 rsvd; |
| /*sub-packet*/ |
| union aud_mdata_subpkt_u { |
| struct aud_mtsbpkt_3d_1_st { |
| u8 threeD_cc:5; |
| u8 rsvd2:3; |
| |
| u8 acat:4; |
| u8 rsvd3:4; |
| |
| u8 threeD_ca; |
| u8 rsvd4[25]; |
| } subpkt_3d_1; |
| |
| struct aud_mtsbpkt_3d_0_st { |
| u8 descriptor0[5]; |
| u8 descriptor1[5]; |
| u8 descriptor2[5]; |
| u8 descriptor3[5]; |
| u8 rsvd4[8]; |
| } subpkt_3d_0; |
| } sbpkt; |
| }; |
| |
| /* multi-stream audio sample pkt - 0xe */ |
| struct msaudsmp_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*hb1*/ |
| u8 stream_present_sp_x:4; |
| u8 hb1_rsvd:4; |
| /*hb2*/ |
| u8 stream_flat_sp:4; |
| u8 b_x:4; |
| |
| u8 rsvd1; |
| /*audio sub-packet*/ |
| struct audmul_sbpkt_st { |
| /*subpacket*/ |
| u32 left_27_4:24; |
| u32 right_27_4:24; |
| /*valid bit from first sub-frame*/ |
| u32 valid_l:1; |
| /*user data bit from first sub-frame*/ |
| u32 user_l:1; |
| /*channel status bit from first sub-frame*/ |
| u32 channel_l:1; |
| /*parity bit from first sub-frame*/ |
| u32 parity_l:1; |
| /*valid bit from second sub-frame*/ |
| u32 valid_r:1; |
| /*user data bit from second sub-frame*/ |
| u32 user_r:1; |
| /*channel status bit from second sub-frame*/ |
| u32 channel_r:1; |
| /*parity bit from second sub-frame*/ |
| u32 parity_r:1; |
| } sbpkt; |
| }; |
| |
| /* one bit multi-stream audio sample pkt - 0xf */ |
| struct obmaudsmp_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*hb1*/ |
| u8 stream_present_sp_x:4; |
| u8 hb1_rsvd:4; |
| /*hb2*/ |
| u8 stream_invalid_sp_x:4; |
| u8 hb2_rsvd:4; |
| |
| u8 rsvd; |
| /*audio sub-packet*/ |
| struct onebmtstr_smaud_sbpkt_st { |
| u8 cha_part0_7; |
| u8 cha_part8_15; |
| u8 cha_part16_23; |
| u8 chb_part0_7; |
| u8 chb_part8_15; |
| u8 chb_part16_23; |
| u8 cha_part24_27:4; |
| u8 chb_part24_27:4; |
| } __packed sbpkt; |
| } __packed; |
| |
| /* EMP pkt - 0x7f */ |
| struct emp_pkt_st { |
| /*packet header*/ |
| u8 pkttype; |
| /*hb1*/ |
| u8 first:1; |
| u8 last:1; |
| u8 hb1_rsvd:6; |
| /*hb2*/ |
| u8 sequence_idx; |
| |
| u8 rsvd; |
| /*content*/ |
| struct content_st { |
| u8 new:1; |
| u8 end:1; |
| u8 ds_type:2; |
| u8 afr:1; |
| u8 vfr:1; |
| u8 sync:1; |
| u8 rev_0:1; |
| u8 rev_1; |
| u8 organization_id; |
| u16 data_set_tag; |
| u16 data_set_length; |
| u8 md[21]; |
| } __packed cnt; |
| } __packed; |
| |
| /* fifo raw data type - 0x8x */ |
| struct fifo_rawdata_st { |
| /*packet header*/ |
| u8 pkttype; |
| u8 version; |
| u8 length; |
| u8 rsd; |
| /*packet body*/ |
| u8 PB[28]; |
| } __packed; |
| |
| /* vendor specific infoFrame packet - 0x81 */ |
| struct vsi_infoframe_st { |
| u8 pkttype:8; |
| struct vsi_ver_st { |
| u8 version:7; |
| u8 chgbit:1; |
| } __packed ver_st; |
| u8 length:5; |
| u8 rsd:3; |
| u8 rsd_hdmi; /* T7 has no this byte */ |
| /*PB0*/ |
| u32 checksum:8; |
| /*PB1-3*/ |
| u32 ieee:24;/* first two hex digits*/ |
| |
| /*body by different format*/ |
| union vsi_sbpkt_u { |
| struct payload_st { |
| u32 data[6]; |
| } __packed payload; |
| |
| /* video format 0x01*/ |
| struct vsi_st { |
| u8 data[24]; |
| } __packed vsi_st; |
| |
| /* 3D: video format(0x2) */ |
| struct vsi_3dext_st { |
| /*pb4*/ |
| u8 rsvd0:5; |
| u8 vdfmt:3; |
| /*pb5*/ |
| u8 rsvd2:3; |
| u8 threed_meta_pre:1; |
| u8 threed_st:4; |
| /*pb6*/ |
| u8 rsvd3:4; |
| u8 threed_ex:4; |
| /*pb7*/ |
| u8 threed_meta_type:3; |
| u8 threed_meta_length:5; |
| u8 threed_meta_data[20]; |
| } __packed vsi_3dext; |
| |
| /* dolby vision10, length 0x18 */ |
| /* ieee 0x000c03 */ |
| struct vsi_dobv10 { |
| /*pb4*/ |
| /* 0x00: Video formats not defined in Table 8-14 |
| * of the HDMI specification v1.4b |
| * 0x20: Video formats defined in Table 8-14 |
| * of the HDMI specification v1.4b |
| */ |
| u8 vdfmt; |
| /*pb5*/ |
| /* 0x0: Video formats not defined in Table 8-14 |
| * of the HDMI specification, v1.4b |
| * 0x1: 4K x 2K at 29.97 Hz or 30Hz |
| * as defined in Table 8-14 |
| * of the HDMI specification, v1.4b |
| * 0x2: 4K x 2K at 25 Hz as defined in Table 8-14 |
| * of the HDMI specification, v1.4b |
| * 0x3: 4K x 2K at 23.98 Hz or 24Hz |
| * as defined in Table 8-14 |
| * of the HDMI specification, v1.4b |
| */ |
| u8 hdmi_vic; |
| /*pb6*/ |
| u8 data[19]; /* val=0 */ |
| } __packed vsi_dobv10; |
| |
| /* dolby vision15, length 0x1b*/ |
| /* ieee 0x00d046 */ |
| struct vsi_dobv15 { |
| /*pb4*/ |
| u8 ll:1; |
| u8 dv_vs10_sig_type:4; |
| u8 source_dm_ver:3; |
| /*pb5*/ |
| u8 tmax_pq_hi:4; |
| u8 rsvd:2; |
| u8 aux_md:1; |
| u8 bklt_md:1; |
| /*pb6*/ |
| u8 tmax_pq_lo; |
| /*pb7*/ |
| u8 aux_run_mode; |
| /*pb8*/ |
| u8 aux_run_ver; |
| /*pb9*/ |
| u8 aux_debug; |
| /* pb10 */ |
| u8 content_type; |
| /*pb11~27*/ |
| u8 data[17]; /* val=0 */ |
| } __packed vsi_dobv15; |
| |
| /* HDR10+, length 27*/ |
| /* ieee 0x90848b */ |
| struct vsi_hdr10p { |
| /*pb4*/ |
| u8 rsvd:1; |
| u8 max_lum:5; |
| u8 app_ver:2; |
| u8 average_maxrgb; |
| u8 distr_val_0; |
| u8 distr_val_1; |
| u8 distr_val_2; |
| u8 distr_val_3; |
| u8 distr_val_4; |
| u8 distr_val_5; |
| u8 distr_val_6; |
| u8 distr_val_7; |
| u8 distr_val_8; |
| u8 knee_point_x_hi:4; |
| u8 num_bezier:4; |
| u8 knee_point_y_hi:2; |
| u8 knee_point_x_lo:6; |
| u8 knee_point_y_lo; |
| /*pb17~26*/ |
| u8 data[10]; /* val=0 */ |
| u8 rsvd1:6; |
| u8 vsif_timing_mode:1; |
| u8 graphics_overlay_flag:1; |
| } __packed vsi_hdr10p; |
| |
| /*TODO:hdmi2.1 spec vsi packet*/ |
| struct vsi_st_21 { |
| /*pb4*/ |
| u8 ver:8; |
| /*pb5*/ |
| u8 valid_3d:1; |
| u8 allm_mode:1; |
| u8 rsvd1:2; |
| u8 ccbpc:4; |
| /*pb6*/ |
| u8 data[22]; |
| } __packed vsi_st_21; |
| } __packed sbpkt; |
| } __packed; |
| |
| /* AVI infoFrame packet - 0x82 */ |
| struct avi_infoframe_st { |
| u8 pkttype; |
| u8 version; |
| u8 length; |
| /*PB0*/ |
| u8 checksum; |
| union cont_u { |
| struct v1_st { |
| /*byte 1*/ |
| u8 scaninfo:2; /* S1,S0 */ |
| u8 barinfo:2; /* B1,B0 */ |
| u8 activeinfo:1; /* A0 */ |
| u8 colorindicator:2; /* Y1,Y0 */ |
| u8 rev0:1; |
| /*byte 2*/ |
| u8 fmt_ration:4; /* R3-R0 */ |
| u8 pic_ration:2; /* M1-M0 */ |
| u8 colorimetry:2; /* C1-C0 */ |
| /*byte 3*/ |
| u8 pic_scaling:2; /* SC1-SC0 */ |
| u8 rev1:6; |
| /*byte 4*/ |
| u8 rev2:8; |
| /*byte 5*/ |
| u8 rev3:8; |
| } __packed v1; |
| struct v4_st { /* v2=v3=v4 */ |
| /*byte 1*/ |
| u8 scaninfo:2; /* S1,S0 */ |
| u8 barinfo:2; /* B1,B0 */ |
| u8 activeinfo:1; /* A0 1 */ |
| u8 colorindicator:3; /* Y2-Y0 */ |
| /*byte 2*/ |
| u8 fmt_ration:4; /* R3-R0 */ |
| u8 pic_ration:2; /* M1-M0 */ |
| u8 colorimetry:2; /* C1-C0 */ |
| /*byte 3*/ |
| u8 pic_scaling:2; /* SC1-SC0 */ |
| u8 qt_range:2; /* Q1-Q0 */ |
| u8 ext_color:3; /* EC2-EC0 */ |
| u8 it_content:1; /* ITC */ |
| /*byte 4*/ |
| u8 vic:8; /* VIC7-VIC0 */ |
| /*byte 5*/ |
| u8 pix_repeat:4; /* PR3-PR0 */ |
| u8 content_type:2; /* CN1-CN0 */ |
| u8 ycc_range:2; /* YQ1-YQ0 */ |
| } __packed v4; |
| } cont; |
| /*byte 6,7*/ |
| u16 line_num_end_topbar:16; /*littel endian can use*/ |
| /*byte 8,9*/ |
| u16 line_num_start_btmbar:16; |
| /*byte 10,11*/ |
| u16 pix_num_left_bar:16; |
| /*byte 12,13*/ |
| u16 pix_num_right_bar:16; |
| /* byte 14 */ |
| u8 additional_colorimetry; |
| } __packed; |
| |
| /* source product descriptor infoFrame - 0x83 */ |
| struct spd_infoframe_st { |
| u8 pkttype; |
| u8 version; |
| u8 length; /*length=25*/ |
| u8 rsd; |
| u8 checksum; |
| /*Vendor Name Character*/ |
| u8 vendor_name[8]; |
| /*Product Description Character*/ |
| u8 product_des[16]; |
| /*byte 25*/ |
| u8 source_info; |
| } __packed; |
| |
| /* audio infoFrame packet - 0x84 */ |
| struct aud_infoframe_st { |
| u8 pkttype; |
| u8 version; |
| u8 length; |
| u8 rsd; |
| u8 checksum; |
| /*byte 1*/ |
| u8 ch_count:3; /*CC2-CC0*/ |
| u8 rev0:1; |
| u8 coding_type:4; /*CT3-CT0*/ |
| /*byte 2*/ |
| u8 sample_size:2; /*SS1-SS0*/ |
| u8 sample_frq:3; /*SF2-SF0*/ |
| u8 rev1:3; |
| /*byte 3*/ |
| u8 fromat; /*fmt according to CT3-CT0*/ |
| /*byte 4*/ |
| u8 ca; /*CA7-CA0*/ |
| /*byte 5*/ |
| u8 lfep:2; /*BL1-BL0*/ |
| u8 rev2:1; |
| u8 level_shift_value:4;/*LSV3-LSV0*/ |
| u8 down_mix:1;/*DM_INH*/ |
| /*byte 6-10*/ |
| u8 rev[5]; |
| } __packed; |
| |
| /* mpeg source infoframe packet - 0x85 */ |
| struct ms_infoframe_st { |
| u8 pkttype; |
| u8 version; |
| u8 length; |
| u8 rsd; |
| u8 checksum; |
| /*byte 1-4*/ |
| /*little endian mode*/ |
| u32 bitrate; /*byte MB0(low)-MB3(upper)*/ |
| |
| /*byte 5*/ |
| struct ms_byte5_st { |
| u8 mpeg_frame:2;/*MF1-MF0*/ |
| u8 rev0:2; |
| u8 field_rpt:1;/*FR0*/ |
| u8 rev1:3; |
| } __packed b5_st; |
| /*byte 6-10*/ |
| u8 rev[5]; |
| } __packed; |
| |
| /* ntsc vbi infoframe packet - 0x86 */ |
| struct vbi_infoframe_st { |
| u8 pkttype; |
| u8 version; |
| u8 length; |
| u8 rsd; |
| u8 checksum; |
| /*packet content*/ |
| u8 data_identifier; |
| u8 data_unit_id; |
| u8 data_unit_length; |
| u8 data_field[24]; |
| } __packed; |
| |
| /* dynamic range and mastering infoframe packet - 0x87 */ |
| struct drm_infoframe_st { |
| u8 pkttype; |
| u8 version; |
| u8 length; |
| u8 rsd; |
| |
| /*static metadata descriptor*/ |
| union meta_des_u { |
| struct des_type1_st { |
| /*PB0*/ |
| u8 checksum; |
| /*PB1*/ |
| /*electrico-optinal transfer function*/ |
| u8 eotf:3; |
| u8 rev0:5; |
| /*PB2*/ |
| /*static metadata descriptor id*/ |
| u8 meta_des_id:3; |
| u8 rev1:5; |
| |
| /*little endian use*/ |
| /*display primaries*/ |
| u16 dis_pri_x0; |
| u16 dis_pri_y0; |
| u16 dis_pri_x1; |
| u16 dis_pri_y1; |
| u16 dis_pri_x2; |
| u16 dis_pri_y2; |
| u16 white_points_x; |
| u16 white_points_y; |
| /*max display mastering luminance*/ |
| u16 max_dislum; |
| /*min display mastering luminance*/ |
| u16 min_dislum; |
| /*maximum content light level*/ |
| u16 max_light_lvl; |
| /*maximum frame-average light level*/ |
| u16 max_fa_light_lvl; |
| } __packed tp1; |
| u32 payload[7]; |
| } __packed des_u; |
| } __packed; |
| |
| union pktinfo { |
| /*normal packet 0x0-0xf*/ |
| struct acr_pkt_st audclkgen_ptk; |
| struct aud_sample_pkt_st audsmp_pkt; |
| struct gcp_pkt_st gcp_pkt; |
| struct acp_pkt_st acp_pkt; |
| struct isrc_pkt_st isrc_pkt; |
| struct obasmp_pkt_st onebitaud_pkt; |
| struct dstaud_pkt_st dstaud_pkt; |
| struct hbraud_pkt_st hbraud_pkt; |
| struct gamutmeta_pkt_st gamutmeta_pkt; |
| struct a3dsmp_pkt_st aud3dsmp_pkt; |
| struct ob3d_smppkt_st oneb3dsmp_pkt; |
| struct audmtdata_pkt_st audmeta_pkt; |
| struct msaudsmp_pkt_st mulstraudsamp_pkt; |
| struct obmaudsmp_pkt_st obmasmpaud_pkt; |
| struct emp_pkt_st emp_pkt; |
| }; |
| |
| union infoframe_u { |
| /*info frame 0x81 - 0x87*/ |
| /* struct pd_infoframe_s word_md_infoframe; */ |
| struct fifo_rawdata_st raw_infoframe; |
| struct vsi_infoframe_st vsi_infoframe; |
| struct avi_infoframe_st avi_infoframe; |
| struct spd_infoframe_st spd_infoframe; |
| struct aud_infoframe_st aud_infoframe; |
| struct ms_infoframe_st ms_infoframe; |
| struct vbi_infoframe_st vbi_infoframe; |
| struct drm_infoframe_st drm_infoframe; |
| }; |
| |
| enum vsi_vid_format_e { |
| VSI_FORMAT_NO_DATA, |
| VSI_FORMAT_EXT_RESOLUTION, |
| VSI_FORMAT_3D_FORMAT, |
| VSI_FORMAT_FUTURE, |
| }; |
| |
| struct rxpkt_st { |
| u32 pkt_cnt_avi; |
| u32 pkt_cnt_vsi; |
| u32 pkt_cnt_drm; |
| u32 pkt_cnt_spd; |
| u32 pkt_cnt_audif; |
| u32 pkt_cnt_mpeg; |
| u32 pkt_cnt_nvbi; |
| |
| u32 pkt_cnt_acr; |
| u32 pkt_cnt_gcp; |
| u32 pkt_cnt_acp; |
| u32 pkt_cnt_isrc1; |
| u32 pkt_cnt_isrc2; |
| u32 pkt_cnt_gameta; |
| u32 pkt_cnt_amp; |
| u32 pkt_cnt_emp; |
| |
| u32 pkt_cnt_vsi_ex; |
| u32 pkt_cnt_drm_ex; |
| u32 pkt_cnt_gmd_ex; |
| u32 pkt_cnt_aif_ex; |
| u32 pkt_cnt_avi_ex; |
| u32 pkt_cnt_acr_ex; |
| u32 pkt_cnt_gcp_ex; |
| u32 pkt_cnt_amp_ex; |
| u32 pkt_cnt_nvbi_ex; |
| u32 pkt_cnt_emp_ex; |
| |
| u32 pkt_op_flag; |
| |
| u32 fifo_int_cnt; |
| u32 fifo_pkt_num; |
| u8 dv_pkt_num; |
| |
| u32 pkt_chk_flg; |
| |
| u32 pkt_attach_vsi; |
| u32 pkt_attach_drm; |
| }; |
| |
| struct pd_infoframe_s { |
| u32 HB; |
| u32 PB0; |
| u32 PB1; |
| u32 PB2; |
| u32 PB3; |
| u32 PB4; |
| u32 PB5; |
| u32 PB6; |
| }; |
| |
| struct packet_info_s { |
| /* packet type 0x81 vendor-specific */ |
| struct pd_infoframe_s vs_info; |
| /* packet type 0x82 AVI */ |
| struct pd_infoframe_s avi_info; |
| /* packet type 0x83 source product description */ |
| struct pd_infoframe_s spd_info; |
| /* packet type 0x84 Audio */ |
| struct pd_infoframe_s aud_pktinfo; |
| /* packet type 0x85 Mpeg source */ |
| struct pd_infoframe_s mpegs_info; |
| /* packet type 0x86 NTSCVBI */ |
| struct pd_infoframe_s ntscvbi_info; |
| /* packet type 0x87 DRM */ |
| struct pd_infoframe_s drm_info; |
| /* packet type 0x01 info */ |
| struct pd_infoframe_s acr_info; |
| /* packet type 0x03 info */ |
| struct pd_infoframe_s gcp_info; |
| /* packet type 0x04 info */ |
| struct pd_infoframe_s acp_info; |
| /* packet type 0x05 info */ |
| struct pd_infoframe_s isrc1_info; |
| /* packet type 0x06 info */ |
| struct pd_infoframe_s isrc2_info; |
| /* packet type 0x0a info */ |
| struct pd_infoframe_s gameta_info; |
| /* packet type 0x0d audio metadata data */ |
| struct pd_infoframe_s amp_info; |
| /* packet type 0x7f emp */ |
| struct pd_infoframe_s emp_info; |
| }; |
| |
| struct st_pkt_test_buff { |
| /* packet type 0x81 vendor-specific */ |
| struct pd_infoframe_s vs_info; |
| /* packet type 0x82 AVI */ |
| struct pd_infoframe_s avi_info; |
| /* packet type 0x83 source product description */ |
| struct pd_infoframe_s spd_info; |
| /* packet type 0x84 Audio */ |
| struct pd_infoframe_s aud_pktinfo; |
| /* packet type 0x85 Mpeg source */ |
| struct pd_infoframe_s mpegs_info; |
| /* packet type 0x86 NTSCVBI */ |
| struct pd_infoframe_s ntscvbi_info; |
| /* packet type 0x87 DRM */ |
| struct pd_infoframe_s drm_info; |
| |
| /* packet type 0x01 info */ |
| struct pd_infoframe_s acr_info; |
| /* packet type 0x03 info */ |
| struct pd_infoframe_s gcp_info; |
| /* packet type 0x04 info */ |
| struct pd_infoframe_s acp_info; |
| /* packet type 0x05 info */ |
| struct pd_infoframe_s isrc1_info; |
| /* packet type 0x06 info */ |
| struct pd_infoframe_s isrc2_info; |
| /* packet type 0x0a info */ |
| struct pd_infoframe_s gameta_info; |
| /* packet type 0x0d audio metadata data */ |
| struct pd_infoframe_s amp_info; |
| |
| /* packet type 0x7f EMP */ |
| struct pd_infoframe_s emp_info; |
| |
| /*externl set*/ |
| struct pd_infoframe_s ex_vsi; |
| struct pd_infoframe_s ex_avi; |
| struct pd_infoframe_s ex_audif; |
| struct pd_infoframe_s ex_drm; |
| struct pd_infoframe_s ex_nvbi; |
| struct pd_infoframe_s ex_acr; |
| struct pd_infoframe_s ex_gcp; |
| struct pd_infoframe_s ex_gmd; |
| struct pd_infoframe_s ex_amp; |
| }; |
| |
| extern struct packet_info_s rx_pkt; |
| extern u32 vsif_type; |
| extern u32 emp_type; |
| /*extern bool hdr_enable;*/ |
| void rx_pkt_status(void); |
| void rx_pkt_debug(void); |
| void rx_debug_pktinfo(char input[][20]); |
| void rx_pkt_dump(enum pkt_type_e typeid); |
| void rx_pkt_initial(void); |
| int rx_pkt_handler(enum pkt_decode_type pkt_int_src); |
| u32 rx_pkt_type_mapping(enum pkt_type_e pkt_type); |
| void rx_pkt_buffclear(enum pkt_type_e pkt_type); |
| void rx_pkt_content_chk_en(u32 enable); |
| void rx_pkt_check_content(void); |
| void rx_pkt_set_fifo_pri(u32 pri); |
| u32 rx_pkt_get_fifo_pri(void); |
| void rx_get_vsi_info(void); |
| /*please ignore checksum byte*/ |
| void rx_pkt_get_audif_ex(void *pktinfo); |
| /*please ignore checksum byte*/ |
| void rx_pkt_get_avi_ex(void *pktinfo); |
| void rx_pkt_get_drm_ex(void *pktinfo); |
| void rx_pkt_get_acr_ex(void *pktinfo); |
| void rx_pkt_get_gmd_ex(void *pktinfo); |
| void rx_pkt_get_ntscvbi_ex(void *pktinfo); |
| void rx_pkt_get_amp_ex(void *pktinfo); |
| void rx_pkt_get_vsi_ex(void *pktinfo); |
| void rx_pkt_get_gcp_ex(void *pktinfo); |
| u32 rx_pkt_chk_attach_vsi(void); |
| void rx_pkt_clr_attach_vsi(void); |
| u32 rx_pkt_chk_attach_drm(void); |
| void rx_pkt_clr_attach_drm(void); |
| u32 rx_pkt_chk_busy_vsi(void); |
| u32 rx_pkt_chk_busy_drm(void); |
| void rx_get_pd_fifo_param(enum pkt_type_e pkt_type, |
| struct pd_infoframe_s *pkt_info); |
| void rx_get_avi_info(struct avi_infoframe_st *st_pkt); |
| |
| #endif |