blob: 40adf360a6cb1d312f7b1f05f0bff85d3cebcab0 [file] [log] [blame]
/*
* drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_pktinfo.h
*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#ifndef __HDMIRX_PKT_INFO_H__
#define __HDMIRX_PKT_INFO_H__
#include <linux/workqueue.h>
#include <linux/amlogic/cpu_version.h>
#define K_ONEPKT_BUFF_SIZE 8
#define K_PKT_REREAD_SIZE 2
#define K_FLAG_TAB_END 0xa0a05f5f
#define IEEE_VSI14 0x000c03
#define IEEE_DV15 0x00d046
#define IEEE_VSI21 0xc45dd8
#define IEEE_HDR10PLUS 0x90848b
enum vsi_state_e {
E_VSI_NULL,
E_VSI_4K3D,
E_VSI_DV10,
E_VSI_DV15,
E_VSI_HDR10PLUS,
E_VSI_VSI21
};
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 {
uint32_t pkt_type;
uint32_t reg_bit;
};
/* audio clock regeneration pkt - 0x1 */
struct acr_pkt_st {
/*packet header*/
uint8_t pkttype;
uint8_t zero0;
uint8_t zero1;
uint8_t rsvd;
/*sub packet 1*/
struct sbpkt1_st {
/*subpacket*/
uint8_t SB0;
uint8_t SB1_CTS_H:4;
uint8_t SB1_rev:4;
uint8_t SB2_CTS_M;
uint8_t SB3_CTS_L;
uint8_t SB4_N_H:4;
uint8_t SB4_rev:4;
uint8_t SB5_N_M;
uint8_t SB6_N_L;
} sbpkt1;
/*sub packet 2*/
struct sbpkt2_st {
/*subpacket*/
uint8_t SB0;
uint8_t SB1_CTS_H:4;
uint8_t SB1_rev:4;
uint8_t SB2_CTS_M;
uint8_t SB3_CTS_L;
uint8_t SB4_N_H:4;
uint8_t SB4_rev:4;
uint8_t SB5_N_M;
uint8_t SB6_N_L;
} sbpkt2;
/*sub packet 3*/
struct sbpkt3_st {
/*subpacket*/
uint8_t SB0;
uint8_t SB1_CTS_H:4;
uint8_t SB1_rev:4;
uint8_t SB2_CTS_M;
uint8_t SB3_CTS_L;
uint8_t SB4_N_H:4;
uint8_t SB4_rev:4;
uint8_t SB5_N_M;
uint8_t SB6_N_L;
} sbpkt3;
/*sub packet 4*/
struct sbpkt4_st {
/*subpacket*/
uint8_t SB0;
uint8_t SB1_CTS_H:4;
uint8_t SB1_rev:4;
uint8_t SB2_CTS_M;
uint8_t SB3_CTS_L;
uint8_t SB4_N_H:4;
uint8_t SB4_rev:4;
uint8_t SB5_N_M;
uint8_t SB6_N_L;
} sbpkt4;
};
/* audio sample pkt - 0x2 */
struct aud_sample_pkt_st {
/*packet header*/
uint8_t pkttype;
/*HB1*/
uint8_t sample_present:4;
uint8_t layout:1;
uint8_t hb1_rev:3;
/*HB2*/
uint8_t sample_flat:4;
uint8_t b:4;
uint8_t rsvd;
struct aud_smpsbpkt_st {
/*subpacket*/
uint32_t left_27_4:24;
uint32_t right_27_4:24;
/*valid bit from first sub-frame*/
uint32_t valid_l:1;
/*user data bit from first sub-frame*/
uint32_t user_l:1;
/*channel status bit from first sub-frame*/
uint32_t channel_l:1;
/*parity bit from first sub-frame*/
uint32_t parity_l:1;
/*valid bit from second sub-frame*/
uint32_t valid_r:1;
/*user data bit from second sub-frame*/
uint32_t user_r:1;
/*channel status bit from second sub-frame*/
uint32_t channel_r:1;
/*parity bit from second sub-frame*/
uint32_t parity_r:1;
} sbpkt;
};
/* general control pkt - 0x3 */
struct gcp_pkt_st {
/*packet header*/
uint8_t pkttype;
uint8_t hb1_zero;
uint8_t hb2_zero;
uint8_t rsvd;
/*sub packet*/
struct gcp_sbpkt_st {
/*SB0*/
uint8_t set_avmute:1;
uint8_t sb0_zero0:3;
uint8_t clr_avmute:1;
uint8_t sb0_zero1:3;
/*SB1*/
uint8_t colordepth:4;
uint8_t pixelpkgphase:4;
/*SB2*/
uint8_t def_phase:1;
uint8_t sb2_zero:7;
/*SB3*/
uint8_t sb3_zero;
/*SB4*/
uint8_t sb4_zero;
/*SB5*/
uint8_t sb5_zero;
/*SB6*/
uint8_t sb6_zero;
} sbpkt;
};
/* acp control pkt - 0x4 */
struct acp_pkt_st {
/*packet header*/
uint8_t pkttype;
uint8_t acp_type;
uint8_t rev;
uint8_t rsvd;
struct acp_sbpkt_st {
/*depend on acp_type,section 9.3 for detail*/
uint8_t pb[28];
} sbpkt_st;
};
/* ISRC1 pkt - 0x50 and x06 */
struct isrc_pkt_st {
/*packet header*/
uint8_t pkttype;
uint8_t isrc_sts:3;
uint8_t hb1_rev:3;
uint8_t isrc_valid:1;
uint8_t isrc_cont:1;
uint8_t hb2_rev;
uint8_t rsvd;
/*sub-pkt section 8.2 for detail*/
struct isrc_sbpkt_st {
/*UPC_EAN_ISRC 0-15*/
/*UPC_EAN_ISRC 16-32*/
uint8_t upc_ean_isrc[16];
uint8_t rev[12];
} sbpkt;
};
/* one bit audio sample pkt - 0x7 */
struct obasmp_pkt_st {
/*packet header*/
uint8_t pkttype;
/*HB1*/
uint8_t samples_presents_sp_x:4;
uint8_t layout:1;
uint8_t hb1_rev:3;
/*HB2*/
uint8_t samples_invalid_sp_x:4;
uint8_t hb2_rev:4;
uint8_t rsvd;
/*subpacket*/
struct oba_sbpkt_st {
uint8_t chA_part0_7;
uint8_t chA_part8_15;
uint8_t chA_part16_23;
uint8_t chB_part0_7;
uint8_t chB_part8_15;
uint8_t chB_part16_23;
uint8_t chA_part24_27:4;
uint8_t chB_part24_27:4;
} sbpkt;
};
/* DST audio pkt - 0x8 */
struct dstaud_pkt_st {
/*packet header*/
uint8_t pkttype;
/*HB1*/
uint8_t dst_normal_double:1;
uint8_t hb1_rsvd:5;
uint8_t sample_invalid:1;
uint8_t frame_start:1;
/*HB2*/
uint8_t hb2_rsvd;
uint8_t rsvd;
struct dts_subpkt_st {
uint8_t data[28];
} sbpkt;
};
/* hbr audio pkt - 0x9 */
struct hbraud_pkt_st {
/*packet header*/
uint8_t pkttype;
/*HB1*/
uint8_t hb1_rsvd;
/*HB2*/
uint8_t hb2_rsvd:4;
uint8_t bx:4;
uint8_t rsvd;
/*subpacket*/
/*null*/
};
/* gamut metadata pkt - 0xa */
struct gamutmeta_pkt_st {
/*packet header*/
uint8_t pkttype;
/*HB1*/
uint8_t affect_seq_num:4;
uint8_t gbd_profile:3;
uint8_t next_feild:1;
/*HB2*/
uint8_t cur_seq_num:4;
uint8_t pkt_seq:2;
uint8_t hb2_rsvd:1;
uint8_t no_cmt_gbd:1;
uint8_t rsvd;
/*subpacket*/
union gamut_sbpkt_e {
uint8_t p0_gbd_byte[28];
struct p1_profile_st {
uint8_t gbd_length_h;
uint8_t gbd_length_l;
uint8_t checksum;
uint8_t gbd_byte_l[25];
} p1_profile;
uint8_t p1_gbd_byte_h[28];
} sbpkt;
};
/* 3d audio sample pkt - 0xb */
struct a3dsmp_pkt_st {
/*packet header*/
uint8_t pkttype;
/*hb1*/
uint8_t sample_presents:4;
uint8_t sample_start:1;
uint8_t hb1_rsvd:3;
/*hb2*/
uint8_t sample_flat_sp:4;
uint8_t b_x:4;
uint8_t rsvd;
/*audio sub-packet*/
struct aud3d_sbpkt_st {
uint32_t left_27_4:24;
uint32_t right_27_4:24;
/*valid bit from first sub-frame*/
uint8_t valid_l:1;
/*user data bit from first sub-frame*/
uint8_t user_l:1;
/*channel status bit from first sub-frame*/
uint8_t channel_l:1;
/*parity bit from first sub-frame*/
uint8_t parity_l:1;
/*valid bit from second sub-frame*/
uint8_t valid_r:1;
/*user data bit from second sub-frame*/
uint8_t user_r:1;
/*channel status bit from second sub-frame*/
uint8_t channel_r:1;
/*parity bit from second sub-frame*/
uint8_t parity_r:1;
} sbpkt;
};
/* one bit 3d audio sample pkt - 0xc */
struct ob3d_smppkt_st {
/*packet header*/
uint8_t pkttype;
/*hb1*/
uint8_t samples_present_sp_x:4;
uint8_t sample_start:1;
uint8_t hb1_rsvd:3;
/*hb2*/
uint8_t samples_invalid_sp_x:4;
uint8_t hb2_rsvd:4;
uint8_t rsvd;
/*subpacket*/
struct ob_sbpkt {
uint8_t chA_part0_7;
uint8_t chA_part8_15;
uint8_t chA_part16_23;
uint8_t chB_part0_7;
uint8_t chB_part8_15;
uint8_t chB_part16_23;
uint8_t chA_part24_27:4;
uint8_t chB_part24_27:4;
} sbpkt;
};
/* audio metadata pkt - 0xd */
struct audmtdata_pkt_st {
/*packet header*/
uint8_t pkttype;
/*hb1*/
uint8_t audio_3d:1;
uint8_t hb1_rsvd:7;
/*hb2*/
uint8_t num_view:2;
uint8_t num_audio_str:2;
uint8_t hb2_rsvd:4;
uint8_t rsvd;
/*sub-packet*/
union aud_mdata_subpkt_u {
struct aud_mtsbpkt_3d_1_st {
uint8_t threeD_cc:5;
uint8_t rsvd2:3;
uint8_t acat:4;
uint8_t rsvd3:4;
uint8_t threeD_ca;
uint8_t rsvd4[25];
} subpkt_3d_1;
struct aud_mtsbpkt_3d_0_st {
uint8_t descriptor0[5];
uint8_t descriptor1[5];
uint8_t descriptor2[5];
uint8_t descriptor3[5];
uint8_t rsvd4[8];
} subpkt_3d_0;
} sbpkt;
};
/* multi-stream audio sample pkt - 0xe */
struct msaudsmp_pkt_st {
/*packet header*/
uint8_t pkttype;
/*hb1*/
uint8_t stream_present_sp_x:4;
uint8_t hb1_rsvd:4;
/*hb2*/
uint8_t stream_flat_sp:4;
uint8_t b_x:4;
uint8_t rsvd1;
/*audio sub-packet*/
struct audmul_sbpkt_st {
/*subpacket*/
uint32_t left_27_4:24;
uint32_t right_27_4:24;
/*valid bit from first sub-frame*/
uint32_t valid_l:1;
/*user data bit from first sub-frame*/
uint32_t user_l:1;
/*channel status bit from first sub-frame*/
uint32_t channel_l:1;
/*parity bit from first sub-frame*/
uint32_t parity_l:1;
/*valid bit from second sub-frame*/
uint32_t valid_r:1;
/*user data bit from second sub-frame*/
uint32_t user_r:1;
/*channel status bit from second sub-frame*/
uint32_t channel_r:1;
/*parity bit from second sub-frame*/
uint32_t parity_r:1;
} sbpkt;
};
/* one bit multi-stream audio sample pkt - 0xf */
struct obmaudsmp_pkt_st {
/*packet header*/
uint8_t pkttype;
/*hb1*/
uint8_t stream_present_sp_x:4;
uint8_t hb1_rsvd:4;
/*hb2*/
uint8_t stream_invalid_sp_x:4;
uint8_t hb2_rsvd:4;
uint8_t rsvd;
/*audio sub-packet*/
struct onebmtstr_smaud_sbpkt_st {
uint8_t chA_part0_7;
uint8_t chA_part8_15;
uint8_t chA_part16_23;
uint8_t chB_part0_7;
uint8_t chB_part8_15;
uint8_t chB_part16_23;
uint8_t chA_part24_27:4;
uint8_t chB_part24_27:4;
} __packed sbpkt;
} __packed;
/* EMP pkt - 0x7f */
struct emp_pkt_st {
/*packet header*/
uint8_t pkttype;
/*hb1*/
uint8_t first:1;
uint8_t last:1;
uint8_t hb1_rsvd:6;
/*hb2*/
uint8_t sequence_idx;
uint8_t rsvd;
/*content*/
struct content_st {
uint8_t new:1;
uint8_t end:1;
uint8_t ds_type:2;
uint8_t afr:1;
uint8_t vfr:1;
uint8_t sync:1;
uint8_t rev_0:1;
uint8_t rev_1;
uint8_t organization_id;
uint16_t data_set_tag;
uint16_t data_set_length;
uint8_t md[21];
} __packed cnt;
} __packed;
/* fifo raw data type - 0x8x */
struct fifo_rawdata_st {
/*packet header*/
uint8_t pkttype;
uint8_t version;
uint8_t length;
uint8_t rsd;
/*packet body*/
uint8_t PB[28];
} __packed;
/* vendor specific infoFrame packet - 0x81 */
struct vsi_infoframe_st {
uint8_t pkttype;
struct vsi_ver_st {
uint8_t version:7;
uint8_t chgbit:1;
} __packed ver_st;
uint8_t length;
uint8_t rsd;
/*PB0*/
uint32_t checksum:8;
/*PB1-3*/
uint32_t ieee:24;/* first two hex digits*/
/*body by different format*/
union vsi_sbpkt_u {
struct payload_st {
uint32_t data[6];
} __packed payload;
/* video format 0x01*/
struct vsi_st {
/*pb4*/
uint8_t rsvd0:5;
uint8_t vdfmt:3;
/*pb5*/
uint8_t hdmi_vic;
/*pb6*/
uint8_t data[22];
} __packed vsi;
/* 3D: video format(0x2) */
struct vsi_3Dext_st {
/*pb4*/
uint8_t rsvd0:5;
uint8_t vdfmt:3;
/*pb5*/
uint8_t rsvd2:3;
uint8_t threeD_meta_pre:1;
uint8_t threeD_st:4;
/*pb6*/
uint8_t rsvd3:4;
uint8_t threeD_ex:4;
/*pb7*/
uint8_t threeD_meta_type:3;
uint8_t threeD_meta_length:5;
uint8_t threeD_meta_data[20];
} __packed vsi_3Dext;
/*dolby vision , length 0x18*/
struct vsi_DobV_st {
/*pb4*/
uint8_t rsvd0:5;
uint8_t vdfmt:3;
/*pb5*/
uint8_t hdmi_vic;
/*pb6*/
uint8_t data[22];/* val=0 */
} __packed vsi_DobV;
/*TODO:hdmi2.1 spec vsi packet*/
struct vsi_st_21 {
/*pb4*/
uint8_t ver:8;
/*pb5*/
uint8_t threeD_valid:1;
uint8_t allm_mode:1;
uint8_t rsvd1:2;
uint8_t ccbpc:4;
/*pb6*/
/*todo*/
} __packed vsi_st_21;
} __packed sbpkt;
} __packed;
/* AVI infoFrame packet - 0x82 */
struct avi_infoframe_st {
uint8_t pkttype;
uint8_t version;
uint8_t length;
uint8_t rsd;
/*PB0*/
uint8_t checksum;
union cont_u {
struct v1_st {
/*byte 1*/
uint8_t scaninfo:2; /* S1,S0 */
uint8_t barinfo:2; /* B1,B0 */
uint8_t activeinfo:1; /* A0 */
uint8_t colorindicator:2; /* Y1,Y0 */
uint8_t rev0:1;
/*byte 2*/
uint8_t fmt_ration:4; /* R3-R0 */
uint8_t pic_ration:2; /* M1-M0 */
uint8_t colorimetry:2; /* C1-C0 */
/*byte 3*/
uint8_t pic_scaling:2; /* SC1-SC0 */
uint8_t rev1:6;
/*byte 4*/
uint8_t rev2:8;
/*byte 5*/
uint8_t rev3:8;
} __packed v1;
struct v2v3_st {
/*byte 1*/
uint8_t scaninfo:2; /* S1,S0 */
uint8_t barinfo:2; /* B1,B0 */
uint8_t activeinfo:1; /* A0 1:R3-R0*/
uint8_t colorindicator:3; /* Y2-Y0 */
/*byte 2*/
uint8_t fmt_ration:4; /* R3-R0 */
uint8_t pic_ration:2; /* M1-M0 */
uint8_t colorimetry:2; /* C1-C0 */
/*byte 3*/
uint8_t pic_scaling:2; /* SC1-SC0 */
uint8_t qt_range:2; /* Q1-Q0 */
uint8_t ext_color:3; /* EC2-EC0 */
uint8_t it_content:1; /* ITC */
/*byte 4*/
uint8_t vic:8; /* VIC7-VIC0 */
/*byte 5*/
uint8_t pix_repeat:4; /* PR3-PR0 */
uint8_t content_type:2; /* CN1-CN0 */
uint8_t ycc_range:2; /* YQ1-YQ0 */
} __packed v2v3;
} cont;
/*byte 6,7*/
uint16_t line_num_end_topbar:16; /*littel endian can use*/
/*byte 8,9*/
uint16_t line_num_start_btmbar:16;
/*byte 10,11*/
uint16_t pix_num_left_bar:16;
/*byte 12,13*/
uint16_t pix_num_right_bar:16;
} __packed;
/* source product descriptor infoFrame - 0x83 */
struct spd_infoframe_st {
uint8_t pkttype;
uint8_t version;
uint8_t length; /*length=25*/
uint8_t rsd;
uint8_t checksum;
/*Vendor Name Character*/
uint8_t vendor_name[8];
/*Product Description Character*/
uint8_t product_des[16];
/*byte 25*/
uint8_t source_info;
} __packed;
/* audio infoFrame packet - 0x84 */
struct aud_infoframe_st {
uint8_t pkttype;
uint8_t version;
uint8_t length;
uint8_t rsd;
uint8_t checksum;
/*byte 1*/
uint8_t ch_count:3; /*CC2-CC0*/
uint8_t rev0:1;
uint8_t coding_type:4; /*CT3-CT0*/
/*byte 2*/
uint8_t sample_size:2; /*SS1-SS0*/
uint8_t sample_frq:3; /*SF2-SF0*/
uint8_t rev1:3;
/*byte 3*/
uint8_t fromat; /*fmt according to CT3-CT0*/
/*byte 4*/
uint8_t ca; /*CA7-CA0*/
/*byte 5*/
uint8_t lfep:2; /*BL1-BL0*/
uint8_t rev2:1;
uint8_t level_shift_value:4;/*LSV3-LSV0*/
uint8_t down_mix:1;/*DM_INH*/
/*byte 6-10*/
uint8_t rev[5];
} __packed;
/* mpeg source infoframe packet - 0x85 */
struct ms_infoframe_st {
uint8_t pkttype;
uint8_t version;
uint8_t length;
uint8_t rsd;
uint8_t checksum;
/*byte 1-4*/
/*little endian mode*/
uint32_t bitrate; /*byte MB0(low)-MB3(upper)*/
/*byte 5*/
struct ms_byte5_st {
uint8_t mpeg_frame:2;/*MF1-MF0*/
uint8_t rev0:2;
uint8_t field_rpt:1;/*FR0*/
uint8_t rev1:3;
} __packed b5_st;
/*byte 6-10*/
uint8_t rev[5];
} __packed;
/* ntsc vbi infoframe packet - 0x86 */
struct vbi_infoframe_st {
uint8_t pkttype;
uint8_t version;
uint8_t length;
uint8_t rsd;
uint8_t checksum;
/*packet content*/
uint8_t data_identifier;
uint8_t data_unit_id;
uint8_t data_unit_length;
uint8_t data_field[24];
} __packed;
/* dynamic range and mastering infoframe packet - 0x87 */
struct drm_infoframe_st {
uint8_t pkttype;
uint8_t version;
uint8_t length;
uint8_t rsd;
/*static metadata descriptor*/
union meta_des_u {
struct des_type1_st {
/*PB0*/
uint8_t checksum;
/*PB1*/
/*electrico-optinal transfer function*/
uint8_t eotf:3;
uint8_t rev0:5;
/*PB2*/
/*static metadata descriptor id*/
uint8_t meta_des_id:3;
uint8_t rev1:5;
/*little endian use*/
/*display primaries*/
uint16_t dis_pri_x0;
uint16_t dis_pri_y0;
uint16_t dis_pri_x1;
uint16_t dis_pri_y1;
uint16_t dis_pri_x2;
uint16_t dis_pri_y2;
uint16_t white_points_x;
uint16_t white_points_y;
/*max display mastering luminance*/
uint16_t max_dislum;
/*min display mastering luminance*/
uint16_t min_dislum;
/*maximum content light level*/
uint16_t max_light_lvl;
/*maximum frame-average light level*/
uint16_t max_fa_light_lvl;
} __packed tp1;
uint32_t 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 {
uint32_t pkt_cnt_avi;
uint32_t pkt_cnt_vsi;
uint32_t pkt_cnt_drm;
uint32_t pkt_cnt_spd;
uint32_t pkt_cnt_audif;
uint32_t pkt_cnt_mpeg;
uint32_t pkt_cnt_nvbi;
uint32_t pkt_cnt_acr;
uint32_t pkt_cnt_gcp;
uint32_t pkt_cnt_acp;
uint32_t pkt_cnt_isrc1;
uint32_t pkt_cnt_isrc2;
uint32_t pkt_cnt_gameta;
uint32_t pkt_cnt_amp;
uint32_t pkt_cnt_emp;
uint32_t pkt_cnt_vsi_ex;
uint32_t pkt_cnt_drm_ex;
uint32_t pkt_cnt_gmd_ex;
uint32_t pkt_cnt_aif_ex;
uint32_t pkt_cnt_avi_ex;
uint32_t pkt_cnt_acr_ex;
uint32_t pkt_cnt_gcp_ex;
uint32_t pkt_cnt_amp_ex;
uint32_t pkt_cnt_nvbi_ex;
uint32_t pkt_cnt_emp_ex;
uint32_t pkt_op_flag;
uint32_t fifo_Int_cnt;
uint32_t fifo_pkt_num;
uint32_t pkt_chk_flg;
uint32_t pkt_attach_vsi;
uint32_t pkt_attach_drm;
};
struct pd_infoframe_s {
uint32_t HB;
uint32_t PB0;
uint32_t PB1;
uint32_t PB2;
uint32_t PB3;
uint32_t PB4;
uint32_t PB5;
uint32_t 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 bool hdr_enable;*/
extern void rx_pkt_status(void);
extern void rx_pkt_debug(void);
extern void rx_debug_pktinfo(char input[][20]);
extern void rx_pkt_dump(enum pkt_type_e typeID);
extern void rx_pkt_initial(void);
extern int rx_pkt_handler(enum pkt_decode_type pkt_int_src);
extern uint32_t rx_pkt_type_mapping(enum pkt_type_e pkt_type);
extern void rx_pkt_buffclear(enum pkt_type_e pkt_type);
extern void rx_pkt_content_chk_en(uint32_t enable);
extern void rx_pkt_check_content(void);
extern void rx_pkt_set_fifo_pri(uint32_t pri);
extern uint32_t rx_pkt_get_fifo_pri(void);
extern uint8_t rx_get_vsi_info(void);
/*please ignore checksum byte*/
extern void rx_pkt_get_audif_ex(void *pktinfo);
/*please ignore checksum byte*/
extern void rx_pkt_get_avi_ex(void *pktinfo);
extern void rx_pkt_get_drm_ex(void *pktinfo);
extern void rx_pkt_get_acr_ex(void *pktinfo);
extern void rx_pkt_get_gmd_ex(void *pktinfo);
extern void rx_pkt_get_ntscvbi_ex(void *pktinfo);
extern void rx_pkt_get_amp_ex(void *pktinfo);
extern void rx_pkt_get_vsi_ex(void *pktinfo);
extern void rx_pkt_get_gcp_ex(void *pktinfo);
extern uint32_t rx_pkt_chk_attach_vsi(void);
extern void rx_pkt_clr_attach_vsi(void);
extern uint32_t rx_pkt_chk_attach_drm(void);
extern void rx_pkt_clr_attach_drm(void);
extern uint32_t rx_pkt_chk_busy_vsi(void);
extern uint32_t rx_pkt_chk_busy_drm(void);
extern void rx_get_pd_fifo_param(enum pkt_type_e pkt_type,
struct pd_infoframe_s *pkt_info);
#endif