libdvr: Update dvb headers [1/1]
PD#SWPL-139622
Problem:
update dvb headers
Solution:
update dvb headers
Verify:
verified at ohm
Change-Id: I407a2118f684a05c968b7ec1eb23579f2466ba09
Signed-off-by: chuangcheng peng <chuangcheng.peng@amlogic.com>
diff --git a/include/aml_key.h b/include/aml_key.h
new file mode 100644
index 0000000..4ce1c4f
--- /dev/null
+++ b/include/aml_key.h
@@ -0,0 +1,77 @@
+/* SPDX-License-Identifier: LGPL-2.1+ WITH Linux-syscall-note */
+/*
+ * include/linux/amlogic/aml_key.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 _AML_KEY_H_
+#define _AML_KEY_H_
+
+enum user_id {
+ DSC_LOC_DEC,
+ DSC_NETWORK,
+ DSC_LOC_ENC,
+
+ CRYPTO_T0 = 0x100,
+ CRYPTO_T1 = 0x101,
+ CRYPTO_T2 = 0x102,
+ CRYPTO_T3 = 0x103,
+ CRYPTO_T4 = 0x104,
+ CRYPTO_T5 = 0x105,
+ CRYPTO_ANY = 0x106,
+};
+
+enum key_algo {
+ KEY_ALGO_AES,
+ KEY_ALGO_TDES,
+ KEY_ALGO_DES,
+ KEY_ALGO_CSA2,
+ KEY_ALGO_CSA3,
+ KEY_ALGO_NDL,
+ KEY_ALGO_ND,
+ KEY_ALGO_S17,
+ KEY_ALGO_SM4
+};
+
+struct key_descr {
+ unsigned int key_index;
+ unsigned int key_len;
+ unsigned char key[32];
+};
+
+struct key_config {
+ unsigned int key_index;
+ int key_userid;
+ int key_algo;
+ //cur just for s17 algo
+ unsigned int ext_value;
+};
+
+struct key_alloc {
+ int is_iv;
+ unsigned int key_index;
+};
+
+#define KEY_ALLOC _IOWR('o', 64, struct key_alloc)
+#define KEY_FREE _IO('o', 65)
+#define KEY_SET _IOR('o', 66, struct key_descr)
+#define KEY_CONFIG _IOR('o', 67, struct key_config)
+#define KEY_GET_FLAG _IOWR('o', 68, struct key_descr)
+
+//int dmx_key_init(void);
+//void dmx_key_exit(void);
+
+#endif
+
diff --git a/include/aml_kt.h b/include/aml_kt.h
new file mode 100644
index 0000000..c99d968
--- /dev/null
+++ b/include/aml_kt.h
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
+/*
+ * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
+ */
+
+#ifndef _AML_KT_H_
+#define _AML_KT_H_
+
+#include <linux/types.h>
+
+/* key user */
+#define AML_KT_USER_M2M_0 (0)
+#define AML_KT_USER_M2M_1 (1)
+#define AML_KT_USER_M2M_2 (2)
+#define AML_KT_USER_M2M_3 (3)
+#define AML_KT_USER_M2M_4 (4)
+#define AML_KT_USER_M2M_5 (5)
+#define AML_KT_USER_M2M_ANY (7)
+#define AML_KT_USER_TSD (8)
+#define AML_KT_USER_TSN (9)
+#define AML_KT_USER_TSE (10)
+
+/* key algorithm */
+#define AML_KT_ALGO_AES (0)
+#define AML_KT_ALGO_TDES (1)
+#define AML_KT_ALGO_DES (2)
+#define AML_KT_ALGO_S17 (3)
+#define AML_KT_ALGO_SM4 (4)
+#define AML_KT_ALGO_NDL (7)
+#define AML_KT_ALGO_ND (8)
+#define AML_KT_ALGO_CSA3 (9)
+#define AML_KT_ALGO_CSA2 (10)
+#define AML_KT_ALGO_HMAC (13)
+
+/* key flag */
+#define AML_KT_FLAG_NONE (0)
+#define AML_KT_FLAG_ENC_ONLY (1)
+#define AML_KT_FLAG_DEC_ONLY (2)
+#define AML_KT_FLAG_ENC_DEC (3)
+
+/* key source */
+#define AML_KT_SRC_REE_CERT (15)
+#define AML_KT_SRC_NSK (14)
+#define AML_KT_SRC_MSR3 (13)
+#define AML_KT_SRC_VO (12)
+#define AML_KT_SRC_SPKL (11)
+#define AML_KT_SRC_SPHOST (10)
+#define AML_KT_SRC_REEKL_MSR2 (4)
+#define AML_KT_SRC_REEKL_ETSI (3)
+#define AML_KT_SRC_REEKL_NAGRA (2)
+#define AML_KT_SRC_REEKL_AML (1)
+#define AML_KT_SRC_REE_HOST (0)
+
+#define AML_KT_ALLOC_FLAG_IV (1)
+#define AML_KT_ALLOC_FLAG_HOST (2)
+#define AML_KT_ALLOC_FLAG_NSK_M2M (3)
+
+struct amlkt_alloc_param {
+ __u32 flag;
+ __u32 handle;
+};
+
+struct amlkt_cfg_param {
+ __u32 handle;
+ __u32 key_userid;
+ __u32 key_algo;
+ __u32 key_flag;
+ __u32 key_source;
+ __u32 ext_value;
+};
+
+struct amlkt_set_key_param {
+ __u32 handle;
+ __u8 key[32];
+ __u32 key_len;
+};
+
+#define IOCTL_MAGIC 'a'
+#define AML_KT_ALLOC _IOWR(IOCTL_MAGIC, 0, struct amlkt_alloc_param)
+#define AML_KT_CONFIG _IOW(IOCTL_MAGIC, 1, struct amlkt_cfg_param)
+#define AML_KT_SET _IOWR(IOCTL_MAGIC, 2, struct amlkt_set_key_param)
+#define AML_KT_HW_SET _IOWR(IOCTL_MAGIC, 3, __u32)
+#define AML_KT_FREE _IOW(IOCTL_MAGIC, 4, __u32)
+#define AML_KT_INVALIDATE _IOW(IOCTL_MAGIC, 5, __u32)
+
+#endif
+
diff --git a/include/aml_mkl.h b/include/aml_mkl.h
new file mode 100644
index 0000000..d0556a4
--- /dev/null
+++ b/include/aml_mkl.h
@@ -0,0 +1,112 @@
+/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
+/*
+ * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
+ */
+
+#ifndef _AML_MKL_H_
+#define _AML_MKL_H_
+
+#include <linux/types.h>
+
+/**
+ * Key-Ladder parameters
+ */
+
+/* key ladder level */
+#define AML_KL_LEVEL_3 (3)
+#define AML_KL_LEVEL_4 (4)
+#define AML_KL_LEVEL_5 (5)
+#define AML_KL_LEVEL_6 (6)
+
+#define MSR_KL_LEVEL_1 (1)
+#define MSR_KL_LEVEL_2 (2)
+#define MSR_KL_LEVEL_3 (3)
+
+/* key ladder algo */
+#define AML_KL_ALGO_TDES (0)
+#define AML_KL_ALGO_AES (1)
+
+/* key ladder mode */
+#define AML_KL_MODE_AML (0)
+#define AML_KL_MODE_ETSI (2)
+#define AML_KL_MODE_MSR (3)
+
+/* ETSI key ladder mrk_cfg_index */
+#define AML_KL_MRK_ETSI_0 (0)
+#define AML_KL_MRK_ETSI_1 (1)
+#define AML_KL_MRK_ETSI_2 (2)
+#define AML_KL_MRK_ETSI_3 (3)
+
+/* AML key ladder mrk_cfg_index */
+#define AML_KL_MRK_ACGK (0)
+#define AML_KL_MRK_ACUK (1)
+#define AML_KL_MRK_DVGK (2)
+#define AML_KL_MRK_DVUK (3)
+#define AML_KL_MRK_DGPK1 (4)
+#define AML_KL_MRK_DGPK2 (5)
+#define AML_KL_MRK_ACRK (6)
+
+/* T5W ETSI key ladder kl_num */
+#define AML_KL_NUM_0 (0)
+#define AML_KL_NUM_1 (1)
+#define AML_KL_NUM_2 (2)
+#define AML_KL_NUM_3 (3)
+#define AML_KL_NUM_4 (4)
+#define AML_KL_NUM_5 (5)
+#define AML_KL_NUM_6 (6)
+#define AML_KL_NUM_7 (7)
+#define AML_KL_NUM_8 (8)
+#define AML_KL_NUM_9 (9)
+#define AML_KL_NUM_10 (10)
+
+/* ETSI key ladder func_id */
+#define AML_KL_FUNC_ID_0 (0)
+#define AML_KL_FUNC_ID_6 (6)
+#define AML_KL_FUNC_ID_7 (7)
+#define AML_KL_FUNC_ID_8 (8)
+#define AML_KL_FUNC_ID_9 (9)
+
+/* MSR key ladder func_id */
+#define MSR_KL_FUNC_ID_CWUK (1)
+#define MSR_KL_FUNC_ID_CPUK (2)
+#define MSR_KL_FUNC_ID_SSUK (3)
+#define MSR_KL_FUNC_ID_CAUK (4)
+#define MSR_KL_FUNC_ID_CCCK (6)
+#define MSR_KL_FUNC_ID_TAUK (7)
+
+/* AML key ladder func_id */
+#define AML_KL_FUNC_AES_0 (0)
+#define AML_KL_FUNC_AES_1 (1)
+#define AML_KL_FUNC_AES_2 (2)
+#define AML_KL_FUNC_AES_3 (3)
+#define AML_KL_FUNC_TDES2_0 (4)
+#define AML_KL_FUNC_TDES2_1 (5)
+#define AML_KL_FUNC_HMAC_L (6)
+#define AML_KL_FUNC_HMAC_H (7)
+#define AML_KL_FUNC_AES256_L (8)
+#define AML_KL_FUNC_AES256_H (9)
+
+struct amlkl_usage {
+ __u32 crypto;
+ __u32 algo;
+ __u32 uid;
+};
+
+struct amlkl_params {
+ __u32 kt_handle;
+ __u8 levels;
+ __u8 module_id;
+ __u8 kl_algo;
+ __u8 kl_mode;
+ struct amlkl_usage usage;
+ __u8 mrk_cfg_index;
+ __u8 kl_num;
+ __u8 func_id;
+ __u8 reserved1;
+ __u8 eks[6][16];
+ __u8 reserved[16];
+};
+
+#define AML_MKL_IOCTL_RUN _IOW('L', 1, struct amlkl_params)
+
+#endif
diff --git a/include/amsmc.h b/include/amsmc.h
new file mode 100644
index 0000000..8aece3e
--- /dev/null
+++ b/include/amsmc.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
+/*
+ * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
+ */
+
+#ifndef _AMSMC_H
+#define _AMSMC_H
+
+/* #include <asm/types.h> */
+#include <linux/types.h>
+
+#define AMSMC_MAX_ATR_LEN 33
+
+enum {
+ AMSMC_CARDOUT = 0,
+ AMSMC_CARDIN = 1
+};
+
+struct am_smc_atr {
+ char atr[AMSMC_MAX_ATR_LEN];
+ int atr_len;
+};
+
+struct am_smc_param {
+ int f;
+ int d;
+ int n;
+ int bwi;
+ int cwi;
+ int bgt;
+ int freq;
+ int recv_invert;
+ int recv_lsb_msb;
+ int recv_no_parity;
+ int recv_parity;
+ int xmit_invert;
+ int xmit_lsb_msb;
+ int xmit_retries;
+ int xmit_repeat_dis;
+ int xmit_parity;
+};
+
+#define AMSMC_IOC_MAGIC 'C'
+
+#define AMSMC_IOC_RESET _IOR(AMSMC_IOC_MAGIC, 0x00, struct am_smc_atr)
+#define AMSMC_IOC_GET_STATUS _IOR(AMSMC_IOC_MAGIC, 0x01, int)
+#define AMSMC_IOC_ACTIVE _IO(AMSMC_IOC_MAGIC, 0x02)
+#define AMSMC_IOC_DEACTIVE _IO(AMSMC_IOC_MAGIC, 0x03)
+#define AMSMC_IOC_GET_PARAM _IOR(AMSMC_IOC_MAGIC, 0x04, struct am_smc_param)
+#define AMSMC_IOC_SET_PARAM _IOW(AMSMC_IOC_MAGIC, 0x05, struct am_smc_param)
+#define AMSMC_IOC_HOT_RESET _IOR(AMSMC_IOC_MAGIC, 0x06, struct am_smc_atr)
+
+#endif
diff --git a/include/ca.h b/include/ca.h
new file mode 100644
index 0000000..bd497c8
--- /dev/null
+++ b/include/ca.h
@@ -0,0 +1,326 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * ca.h
+ *
+ * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de>
+ * & Marcus Metzler <marcus@convergence.de>
+ * for convergence integrated media GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef _DVBCA_H_
+#define _DVBCA_H_
+
+#define CONFIG_AMLOGIC_DVB_COMPAT
+
+/**
+ * struct ca_slot_info - CA slot interface types and info.
+ *
+ * @num: slot number.
+ * @type: slot type.
+ * @flags: flags applicable to the slot.
+ *
+ * This struct stores the CA slot information.
+ *
+ * @type can be:
+ *
+ * - %CA_CI - CI high level interface;
+ * - %CA_CI_LINK - CI link layer level interface;
+ * - %CA_CI_PHYS - CI physical layer level interface;
+ * - %CA_DESCR - built-in descrambler;
+ * - %CA_SC -simple smart card interface.
+ *
+ * @flags can be:
+ *
+ * - %CA_CI_MODULE_PRESENT - module (or card) inserted;
+ * - %CA_CI_MODULE_READY - module is ready for usage.
+ */
+
+struct ca_slot_info {
+ int num;
+ int type;
+#define CA_CI 1
+#define CA_CI_LINK 2
+#define CA_CI_PHYS 4
+#define CA_DESCR 8
+#define CA_SC 128
+
+ unsigned int flags;
+#define CA_CI_MODULE_PRESENT 1
+#define CA_CI_MODULE_READY 2
+};
+
+
+/**
+ * struct ca_descr_info - descrambler types and info.
+ *
+ * @num: number of available descramblers (keys).
+ * @type: type of supported scrambling system.
+ *
+ * Identifies the number of descramblers and their type.
+ *
+ * @type can be:
+ *
+ * - %CA_ECD - European Common Descrambler (ECD) hardware;
+ * - %CA_NDS - Videoguard (NDS) hardware;
+ * - %CA_DSS - Distributed Sample Scrambling (DSS) hardware.
+ */
+struct ca_descr_info {
+ unsigned int num;
+ unsigned int type;
+#define CA_ECD 1
+#define CA_NDS 2
+#define CA_DSS 4
+};
+
+/**
+ * struct ca_caps - CA slot interface capabilities.
+ *
+ * @slot_num: total number of CA card and module slots.
+ * @slot_type: bitmap with all supported types as defined at
+ * &struct ca_slot_info (e. g. %CA_CI, %CA_CI_LINK, etc).
+ * @descr_num: total number of descrambler slots (keys)
+ * @descr_type: bitmap with all supported types as defined at
+ * &struct ca_descr_info (e. g. %CA_ECD, %CA_NDS, etc).
+ */
+struct ca_caps {
+ unsigned int slot_num;
+ unsigned int slot_type;
+ unsigned int descr_num;
+ unsigned int descr_type;
+};
+
+/**
+ * struct ca_msg - a message to/from a CI-CAM
+ *
+ * @index: unused
+ * @type: unused
+ * @length: length of the message
+ * @msg: message
+ *
+ * This struct carries a message to be send/received from a CI CA module.
+ */
+struct ca_msg {
+ unsigned int index;
+ unsigned int type;
+ unsigned int length;
+ unsigned char msg[256];
+};
+
+/**
+ * struct ca_descr - CA descrambler control words info
+ *
+ * @index: CA Descrambler slot
+ * @parity: control words parity, where 0 means even and 1 means odd
+ * @cw: CA Descrambler control words
+ */
+struct ca_descr {
+ unsigned int index;
+ unsigned int parity;
+ unsigned char cw[8];
+};
+
+#ifdef CONFIG_AMLOGIC_DVB_COMPAT
+/* CW type. */
+enum ca_cw_type {
+ CA_CW_DVB_CSA_EVEN,
+ CA_CW_DVB_CSA_ODD,
+ CA_CW_AES_EVEN,
+ CA_CW_AES_ODD,
+ CA_CW_AES_EVEN_IV,
+ CA_CW_AES_ODD_IV,
+ CA_CW_DES_EVEN,
+ CA_CW_DES_ODD,
+ CA_CW_SM4_EVEN,
+ CA_CW_SM4_ODD,
+ CA_CW_SM4_EVEN_IV,
+ CA_CW_SM4_ODD_IV,
+ CA_CW_TYPE_MAX
+};
+
+enum ca_dsc_mode {
+ CA_DSC_CBC = 1,
+ CA_DSC_ECB,
+ CA_DSC_IDSA
+};
+
+struct ca_descr_ex {
+ unsigned int index;
+ enum ca_cw_type type;
+ enum ca_dsc_mode mode;
+ int flags;
+#define CA_CW_FROM_KL 1
+ unsigned char cw[16];
+};
+
+/* add for support sc2 ca*/
+enum ca_sc2_cmd_type {
+ CA_ALLOC,
+ CA_FREE,
+ CA_KEY,
+ CA_GET_STATUS,
+ CA_SET_SCB,
+ CA_SET_ALGO
+};
+
+enum ca_sc2_algo_type {
+ CA_ALGO_AES_ECB_CLR_END,
+ CA_ALGO_AES_ECB_CLR_FRONT,
+ CA_ALGO_AES_CBC_CLR_END,
+ CA_ALGO_AES_CBC_IDSA,
+ CA_ALGO_CSA2,
+ CA_ALGO_DES_SCTE41,
+ CA_ALGO_DES_SCTE52,
+ CA_ALGO_TDES_ECB_CLR_END,
+ CA_ALGO_CPCM_LSA_MDI_CBC,
+ CA_ALGO_CPCM_LSA_MDD_CBC,
+ CA_ALGO_CSA3,
+ CA_ALGO_ASA,
+ CA_ALGO_ASA_LIGHT,
+ CA_ALGO_S17_ECB_CLR_END,
+ CA_ALGO_S17_ECB_CTS,
+ CA_ALGO_UNKNOWN
+};
+
+enum ca_sc2_dsc_type {
+ CA_DSC_COMMON_TYPE,
+ CA_DSC_TSD_TYPE, /*just support AES descramble.*/
+ CA_DSC_TSE_TYPE /*just support AES enscramble.*/
+};
+
+/**
+ * struct ca_alloc - malloc ca slot index by params
+ *
+ * @pid: slot use pid.
+ * @algo: use the algorithm
+ * @dsc_type: CA_DSC_COMMON_TYPE:support all ca_algo_type
+ * CA_DSC_TSD_TYPE & CA_DSC_TSE_TYPE just support AES
+ * @ca_index: return slot index.
+ * @loop: 0: just descramble once.
+ * 1: descramble twice.
+ */
+struct ca_sc2_alloc {
+ unsigned int pid;
+ enum ca_sc2_algo_type algo;
+ enum ca_sc2_dsc_type dsc_type;
+ unsigned int ca_index;
+ unsigned char loop;
+};
+
+/**
+ * struct ca_sc2_free - free slot index
+ *
+ * @ca_index: need free slot index.
+ */
+struct ca_sc2_free {
+ unsigned int ca_index;
+};
+
+enum ca_sc2_key_type {
+ CA_KEY_EVEN_TYPE,
+ CA_KEY_EVEN_IV_TYPE,
+ CA_KEY_ODD_TYPE,
+ CA_KEY_ODD_IV_TYPE,
+ CA_KEY_00_TYPE,
+ CA_KEY_00_IV_TYPE
+};
+
+/**
+ * struct ca_sc2_key - set key slot index
+ *
+ * @ca_index: use slot index.
+ * @parity: key type (odd/even/key00)
+ * @key_index: key store index.
+ */
+struct ca_sc2_key {
+ unsigned int ca_index;
+ enum ca_sc2_key_type parity;
+ unsigned int key_index;
+};
+
+/**
+ * struct ca_sc2_scb - set scb
+ *
+ * @ca_index: use slot index.
+ * @ca_scb: ca_scb (2bit)
+ * @ca_scb_as_is:if 1, scb use original
+ * if 0, use ca_scb
+ */
+struct ca_sc2_scb {
+ unsigned int ca_index;
+ unsigned char ca_scb;
+ unsigned char ca_scb_as_is;
+};
+
+/**
+ * struct ca_sc2_algo - set algo
+ *
+ * @ca_index: use slot index.
+ * @algo: algo
+ */
+struct ca_sc2_algo {
+ unsigned int ca_index;
+ enum ca_sc2_algo_type algo;
+};
+
+/**
+ * struct ca_sc2_descr_ex - ca extend descriptor
+ *
+ * @params: command resource params
+ */
+struct ca_sc2_descr_ex {
+ enum ca_sc2_cmd_type cmd;
+ union {
+ struct ca_sc2_alloc alloc_params;
+ struct ca_sc2_free free_params;
+ struct ca_sc2_key key_params;
+ struct ca_sc2_scb scb_params;
+ struct ca_sc2_algo algo_params;
+ } params;
+};
+
+struct ca_pid {
+ unsigned int pid;
+ int index; /* -1 == disable*/
+};
+
+#endif /*CONFIG_AMLOGIC_DVB_COMPAT*/
+#define CA_RESET _IO('o', 128)
+#define CA_GET_CAP _IOR('o', 129, struct ca_caps)
+#define CA_GET_SLOT_INFO _IOR('o', 130, struct ca_slot_info)
+#define CA_GET_DESCR_INFO _IOR('o', 131, struct ca_descr_info)
+#define CA_GET_MSG _IOR('o', 132, struct ca_msg)
+#define CA_SEND_MSG _IOW('o', 133, struct ca_msg)
+#define CA_SET_DESCR _IOW('o', 134, struct ca_descr)
+#ifdef CONFIG_AMLOGIC_DVB_COMPAT
+#define CA_SET_PID _IOW('o', 135, struct ca_pid)
+#define CA_SET_DESCR_EX _IOW('o', 200, struct ca_descr_ex)
+#define CA_SC2_SET_DESCR_EX _IOWR('o', 201, struct ca_sc2_descr_ex)
+#endif
+#if !defined(__KERNEL__)
+
+/* This is needed for legacy userspace support */
+typedef struct ca_slot_info ca_slot_info_t;
+typedef struct ca_descr_info ca_descr_info_t;
+typedef struct ca_caps ca_caps_t;
+typedef struct ca_msg ca_msg_t;
+typedef struct ca_descr ca_descr_t;
+
+#endif
+
+
+#endif
diff --git a/include/dmx.h b/include/dmx.h
index 4a09625..39fa47d 100644
--- a/include/dmx.h
+++ b/include/dmx.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ WITH Linux-syscall-note */
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
* dmx.h
*
@@ -34,54 +34,100 @@
#define CONFIG_AMLOGIC_DVB_COMPAT
#define DMX_FILTER_SIZE 16
-enum dmx_output
-{
- DMX_OUT_DECODER, /* Streaming directly to decoder. */
- DMX_OUT_TAP, /* Output going to a memory buffer */
- /* (to be retrieved via the read command).*/
- DMX_OUT_TS_TAP, /* Output multiplexed into a new TS */
- /* (to be retrieved by reading from the */
- /* logical DVR device). */
- DMX_OUT_TSDEMUX_TAP /* Like TS_TAP but retrieved from the DMX device */
+/**
+ * enum dmx_output - Output for the demux.
+ *
+ * @DMX_OUT_DECODER:
+ * Streaming directly to decoder.
+ * @DMX_OUT_TAP:
+ * Output going to a memory buffer (to be retrieved via the read command).
+ * Delivers the stream output to the demux device on which the ioctl
+ * is called.
+ * @DMX_OUT_TS_TAP:
+ * Output multiplexed into a new TS (to be retrieved by reading from the
+ * logical DVR device). Routes output to the logical DVR device
+ * ``/dev/dvb/adapter?/dvr?``, which delivers a TS multiplexed from all
+ * filters for which @DMX_OUT_TS_TAP was specified.
+ * @DMX_OUT_TSDEMUX_TAP:
+ * Like @DMX_OUT_TS_TAP but retrieved from the DMX device.
+ */
+enum dmx_output {
+ DMX_OUT_DECODER,
+ DMX_OUT_TAP,
+ DMX_OUT_TS_TAP,
+ DMX_OUT_TSDEMUX_TAP
};
-typedef enum dmx_output dmx_output_t;
-typedef enum dmx_input
-{
- DMX_IN_FRONTEND, /* Input from a front-end device. */
- DMX_IN_DVR /* Input from the logical DVR device. */
-} dmx_input_t;
+/**
+ * enum dmx_input - Input from the demux.
+ *
+ * @DMX_IN_FRONTEND: Input from a front-end device.
+ * @DMX_IN_DVR: Input from the logical DVR device.
+ */
+enum dmx_input {
+ DMX_IN_FRONTEND,
+ DMX_IN_DVR
+};
+/**
+ * enum dmx_ts_pes - type of the PES filter.
+ *
+ * @DMX_PES_AUDIO0: first audio PID. Also referred as @DMX_PES_AUDIO.
+ * @DMX_PES_VIDEO0: first video PID. Also referred as @DMX_PES_VIDEO.
+ * @DMX_PES_TELETEXT0: first teletext PID. Also referred as @DMX_PES_TELETEXT.
+ * @DMX_PES_SUBTITLE0: first subtitle PID. Also referred as @DMX_PES_SUBTITLE.
+ * @DMX_PES_PCR0: first Program Clock Reference PID.
+ * Also referred as @DMX_PES_PCR.
+ *
+ * @DMX_PES_AUDIO1: second audio PID.
+ * @DMX_PES_VIDEO1: second video PID.
+ * @DMX_PES_TELETEXT1: second teletext PID.
+ * @DMX_PES_SUBTITLE1: second subtitle PID.
+ * @DMX_PES_PCR1: second Program Clock Reference PID.
+ *
+ * @DMX_PES_AUDIO2: third audio PID.
+ * @DMX_PES_VIDEO2: third video PID.
+ * @DMX_PES_TELETEXT2: third teletext PID.
+ * @DMX_PES_SUBTITLE2: third subtitle PID.
+ * @DMX_PES_PCR2: third Program Clock Reference PID.
+ *
+ * @DMX_PES_AUDIO3: fourth audio PID.
+ * @DMX_PES_VIDEO3: fourth video PID.
+ * @DMX_PES_TELETEXT3: fourth teletext PID.
+ * @DMX_PES_SUBTITLE3: fourth subtitle PID.
+ * @DMX_PES_PCR3: fourth Program Clock Reference PID.
+ *
+ * @DMX_PES_OTHER: any other PID.
+ */
-typedef enum dmx_ts_pes
-{
- DMX_PES_AUDIO0,
- DMX_PES_VIDEO0,
- DMX_PES_TELETEXT0,
- DMX_PES_SUBTITLE0,
- DMX_PES_PCR0,
+enum dmx_ts_pes {
+ DMX_PES_AUDIO0,
+ DMX_PES_VIDEO0,
+ DMX_PES_TELETEXT0,
+ DMX_PES_SUBTITLE0,
+ DMX_PES_PCR0,
- DMX_PES_AUDIO1,
- DMX_PES_VIDEO1,
- DMX_PES_TELETEXT1,
- DMX_PES_SUBTITLE1,
- DMX_PES_PCR1,
+ DMX_PES_AUDIO1,
+ DMX_PES_VIDEO1,
+ DMX_PES_TELETEXT1,
+ DMX_PES_SUBTITLE1,
+ DMX_PES_PCR1,
- DMX_PES_AUDIO2,
- DMX_PES_VIDEO2,
- DMX_PES_TELETEXT2,
- DMX_PES_SUBTITLE2,
- DMX_PES_PCR2,
+ DMX_PES_AUDIO2,
+ DMX_PES_VIDEO2,
+ DMX_PES_TELETEXT2,
+ DMX_PES_SUBTITLE2,
+ DMX_PES_PCR2,
- DMX_PES_AUDIO3,
- DMX_PES_VIDEO3,
- DMX_PES_TELETEXT3,
- DMX_PES_SUBTITLE3,
- DMX_PES_PCR3,
+ DMX_PES_AUDIO3,
+ DMX_PES_VIDEO3,
+ DMX_PES_TELETEXT3,
+ DMX_PES_SUBTITLE3,
+ DMX_PES_PCR3,
- DMX_PES_OTHER
-} dmx_pes_type_t;
+ DMX_PES_OTHER
+};
#define DMX_PES_AUDIO DMX_PES_AUDIO0
#define DMX_PES_VIDEO DMX_PES_VIDEO0
@@ -90,24 +136,49 @@
#define DMX_PES_PCR DMX_PES_PCR0
-typedef struct dmx_filter
-{
- __u8 filter[DMX_FILTER_SIZE];
- __u8 mask[DMX_FILTER_SIZE];
- __u8 mode[DMX_FILTER_SIZE];
-} dmx_filter_t;
+/**
+ * struct dmx_filter - Specifies a section header filter.
+ *
+ * @filter: bit array with bits to be matched at the section header.
+ * @mask: bits that are valid at the filter bit array.
+ * @mode: mode of match: if bit is zero, it will match if equal (positive
+ * match); if bit is one, it will match if the bit is negated.
+ *
+ * Note: All arrays in this struct have a size of DMX_FILTER_SIZE (16 bytes).
+ */
+struct dmx_filter {
+ __u8 filter[DMX_FILTER_SIZE];
+ __u8 mask[DMX_FILTER_SIZE];
+ __u8 mode[DMX_FILTER_SIZE];
+};
-struct dmx_sct_filter_params
-{
- __u16 pid;
- dmx_filter_t filter;
- __u32 timeout;
- __u32 flags;
+/**
+ * struct dmx_sct_filter_params - Specifies a section filter.
+ *
+ * @pid: PID to be filtered.
+ * @filter: section header filter, as defined by &struct dmx_filter.
+ * @timeout: maximum time to filter, in milliseconds.
+ * @flags: extra flags for the section filter.
+ *
+ * Carries the configuration for a MPEG-TS section filter.
+ *
+ * The @flags can be:
+ *
+ * - %DMX_CHECK_CRC - only deliver sections where the CRC check succeeded;
+ * - %DMX_ONESHOT - disable the section filter after one section
+ * has been delivered;
+ * - %DMX_IMMEDIATE_START - Start filter immediately without requiring a
+ * :ref:`DMX_START`.
+ */
+struct dmx_sct_filter_params {
+ __u16 pid;
+ struct dmx_filter filter;
+ __u32 timeout;
+ __u32 flags;
#define DMX_CHECK_CRC 1
#define DMX_ONESHOT 2
#define DMX_IMMEDIATE_START 4
-#define DMX_KERNEL_CLIENT 0x8000
#ifdef CONFIG_AMLOGIC_DVB_COMPAT
#define DMX_USE_SWFILTER 0x100
@@ -125,96 +196,105 @@
#ifdef CONFIG_AMLOGIC_DVB_COMPAT
enum dmx_input_source {
- INPUT_DEMOD,
- INPUT_LOCAL,
- INPUT_LOCAL_SEC
+ INPUT_DEMOD,
+ INPUT_LOCAL,
+ INPUT_LOCAL_SEC
};
/**
* struct dmx_non_sec_es_header - non-sec Elementary Stream (ES) Header
*
- * @pts_dts_flag:[1:0], 01:pts valid, 10:dts valid
- * @pts: pts value
- * @dts: dts value
- * @len: data len
+ * @pts_dts_flag:[1:0], 10:pts valid, 01:dts valid
+ * @pts_dts_flag:[3:2], 10:scb is scrambled, 01:pscp invalid
+ * @pts: pts value
+ * @dts: dts value
+ * @len: data len
*/
struct dmx_non_sec_es_header {
- __u8 pts_dts_flag;
- __u64 pts;
- __u64 dts;
- __u32 len;
+ __u8 pts_dts_flag;
+ __u64 pts;
+ __u64 dts;
+ __u32 len;
};
/**
* struct dmx_sec_es_data - sec Elementary Stream (ES)
*
- * @pts_dts_flag:[1:0], 01:pts valid, 10:dts valid
- * @pts: pts value
- * @dts: dts value
- * @buf_start: buf start addr
- * @buf_end: buf end addr
+ * @pts_dts_flag:[1:0], 10:pts valid, 01:dts valid
+ * @pts_dts_flag:[3:2], 10:scb is scrambled, 01:pscp invalid
+ * @pts: pts value
+ * @dts: dts value
+ * @buf_start: buf start addr
+ * @buf_end: buf end addr
* @data_start: data start addr
* @data_end: data end addr
*/
struct dmx_sec_es_data {
- __u8 pts_dts_flag;
- __u64 pts;
- __u64 dts;
- __u32 buf_start;
- __u32 buf_end;
- __u32 data_start;
- __u32 data_end;
+ __u8 pts_dts_flag;
+ __u64 pts;
+ __u64 dts;
+ __u32 buf_start;
+ __u32 buf_end;
+ __u32 data_start;
+ __u32 data_end;
};
struct dmx_sec_ts_data {
- __u32 buf_start;
- __u32 buf_end;
- __u32 data_start;
- __u32 data_end;
+ __u32 buf_start;
+ __u32 buf_end;
+ __u32 data_start;
+ __u32 data_end;
+};
+
+struct dmx_temi_data {
+ __u8 pts_dts_flag;
+ __u64 pts;
+ __u64 dts;
+ __u8 temi[188];
};
enum dmx_audio_format {
- AUDIO_UNKNOWN = 0, /* unknown media */
- AUDIO_MPX = 1, /* mpeg audio MP2/MP3 */
- AUDIO_AC3 = 2, /* Dolby AC3/EAC3 */
- AUDIO_AAC_ADTS = 3, /* AAC-ADTS */
- AUDIO_AAC_LOAS = 4, /* AAC-LOAS */
- AUDIO_DTS = 5, /* DTS */
- AUDIO_MAX
+ AUDIO_UNKNOWN = 0, /* unknown media */
+ AUDIO_MPX = 1, /* mpeg audio MP2/MP3 */
+ AUDIO_AC3 = 2, /* Dolby AC3/EAC3 */
+ AUDIO_AAC_ADTS = 3, /* AAC-ADTS */
+ AUDIO_AAC_LOAS = 4, /* AAC-LOAS */
+ AUDIO_DTS = 5, /* DTS */
+ AUDIO_MAX
};
struct dmx_mem_info {
- __u32 dmx_total_size;
- __u32 dmx_buf_phy_start;
- __u32 dmx_free_size;
- __u32 dvb_core_total_size;
- __u32 dvb_core_free_size;
- __u32 wp_offset;
- __u64 newest_pts;
+ __u32 dmx_total_size;
+ __u32 dmx_buf_phy_start;
+ __u32 dmx_free_size;
+ __u32 dvb_core_total_size;
+ __u32 dvb_core_free_size;
+ __u32 wp_offset;
+ __u64 newest_pts;
};
struct dmx_sec_mem {
- __u32 buff;
- __u32 size;
+ __u32 buff;
+ __u32 size;
};
#endif
/**
* struct dmx_pes_filter_params - Specifies Packetized Elementary Stream (PES)
- * filter parameters.
+ * filter parameters.
*
- * @pid: PID to be filtered.
- * @input: Demux input, as specified by &enum dmx_input.
- * @output: Demux output, as specified by &enum dmx_output.
- * @pes_type: Type of the pes filter, as specified by &enum dmx_pes_type.
- * @flags: Demux PES flags.
+ * @pid: PID to be filtered.
+ * @input: Demux input, as specified by &enum dmx_input.
+ * @output: Demux output, as specified by &enum dmx_output.
+ * @pes_type: Type of the pes filter, as specified by &enum dmx_pes_type.
+ * @flags: Demux PES flags.
*/
struct dmx_pes_filter_params {
- __u16 pid;
- dmx_input_t input;
- dmx_output_t output;
- dmx_pes_type_t pes_type;
- __u32 flags;
+ __u16 pid;
+ enum dmx_input input;
+ enum dmx_output output;
+ enum dmx_ts_pes pes_type;
+ __u32 flags;
#ifdef CONFIG_AMLOGIC_DVB_COMPAT
/*bit 8~15 for mem sec_level*/
#define DMX_MEM_SEC_LEVEL1 (1 << 10)
@@ -228,7 +308,8 @@
/*bit 16~23 for output */
#define DMX_ES_OUTPUT (1 << 16)
/*set raw mode, it will send the struct dmx_sec_es_data, not es data*/
-#define DMX_OUTPUT_RAW_MODE (1 << 17)
+#define DMX_OUTPUT_RAW_MODE (1 << 17)
+#define DMX_TEMI_FLAGS (1 << 18)
/*24~31 one byte for audio type, dmx_audio_format_t*/
#define DMX_AUDIO_FORMAT_BIT 24
@@ -258,70 +339,171 @@
#endif
} dmx_source_t;
+/**
+ * struct dmx_stc - Stores System Time Counter (STC) information.
+ *
+ * @num: input data: number of the STC, from 0 to N.
+ * @base: output: divisor for STC to get 90 kHz clock.
+ * @stc: output: stc in @base * 90 kHz units.
+ */
struct dmx_stc {
- unsigned int num; /* input : which STC? 0..N */
- unsigned int base; /* output: divisor for stc to get 90 kHz clock */
- __u64 stc; /* output: stc in 'base'*90 kHz units */
+ unsigned int num;
+ unsigned int base;
+ __u64 stc;
+};
+
+/**
+ * enum dmx_buffer_flags - DMX memory-mapped buffer flags
+ *
+ * @DMX_BUFFER_FLAG_HAD_CRC32_DISCARD:
+ * Indicates that the Kernel discarded one or more frames due to wrong
+ * CRC32 checksum.
+ * @DMX_BUFFER_FLAG_TEI:
+ * Indicates that the Kernel has detected a Transport Error indicator
+ * (TEI) on a filtered pid.
+ * @DMX_BUFFER_PKT_COUNTER_MISMATCH:
+ * Indicates that the Kernel has detected a packet counter mismatch
+ * on a filtered pid.
+ * @DMX_BUFFER_FLAG_DISCONTINUITY_DETECTED:
+ * Indicates that the Kernel has detected one or more frame discontinuity.
+ * @DMX_BUFFER_FLAG_DISCONTINUITY_INDICATOR:
+ * Received at least one packet with a frame discontinuity indicator.
+ */
+
+enum dmx_buffer_flags {
+ DMX_BUFFER_FLAG_HAD_CRC32_DISCARD = 1 << 0,
+ DMX_BUFFER_FLAG_TEI = 1 << 1,
+ DMX_BUFFER_PKT_COUNTER_MISMATCH = 1 << 2,
+ DMX_BUFFER_FLAG_DISCONTINUITY_DETECTED = 1 << 3,
+ DMX_BUFFER_FLAG_DISCONTINUITY_INDICATOR = 1 << 4,
+};
+
+/**
+ * struct dmx_buffer - dmx buffer info
+ *
+ * @index: id number of the buffer
+ * @bytesused: number of bytes occupied by data in the buffer (payload);
+ * @offset: for buffers with memory == DMX_MEMORY_MMAP;
+ * offset from the start of the device memory for this plane,
+ * (or a "cookie" that should be passed to mmap() as offset)
+ * @length: size in bytes of the buffer
+ * @flags: bit array of buffer flags as defined by &enum dmx_buffer_flags.
+ * Filled only at &DMX_DQBUF.
+ * @count: monotonic counter for filled buffers. Helps to identify
+ * data stream loses. Filled only at &DMX_DQBUF.
+ *
+ * Contains data exchanged by application and driver using one of the streaming
+ * I/O methods.
+ *
+ * Please notice that, for &DMX_QBUF, only @index should be filled.
+ * On &DMX_DQBUF calls, all fields will be filled by the Kernel.
+ */
+struct dmx_buffer {
+ __u32 index;
+ __u32 bytesused;
+ __u32 offset;
+ __u32 length;
+ __u32 flags;
+ __u32 count;
+};
+
+/**
+ * struct dmx_requestbuffers - request dmx buffer information
+ *
+ * @count: number of requested buffers,
+ * @size: size in bytes of the requested buffer
+ *
+ * Contains data used for requesting a dmx buffer.
+ * All reserved fields must be set to zero.
+ */
+struct dmx_requestbuffers {
+ __u32 count;
+ __u32 size;
+};
+
+/**
+ * struct dmx_exportbuffer - export of dmx buffer as DMABUF file descriptor
+ *
+ * @index: id number of the buffer
+ * @flags: flags for newly created file, currently only O_CLOEXEC is
+ * supported, refer to manual of open syscall for more details
+ * @fd: file descriptor associated with DMABUF (set by driver)
+ *
+ * Contains data used for exporting a dmx buffer as DMABUF file descriptor.
+ * The buffer is identified by a 'cookie' returned by DMX_QUERYBUF
+ * (identical to the cookie used to mmap() the buffer to userspace). All
+ * reserved fields must be set to zero. The field reserved0 is expected to
+ * become a structure 'type' allowing an alternative layout of the structure
+ * content. Therefore this field should not be used for any other extensions.
+ */
+struct dmx_exportbuffer {
+ __u32 index;
+ __u32 flags;
+ __s32 fd;
};
#ifdef CONFIG_AMLOGIC_DVB_COMPAT
enum {
- DMA_0 = 0,
- DMA_1,
- DMA_2,
- DMA_3,
- DMA_4,
- DMA_5,
- DMA_6,
- DMA_7,
- FRONTEND_TS0 = 32,
- FRONTEND_TS1,
- FRONTEND_TS2,
- FRONTEND_TS3,
- FRONTEND_TS4,
- FRONTEND_TS5,
- FRONTEND_TS6,
- FRONTEND_TS7,
- DMA_0_1 = 64,
- DMA_1_1,
- DMA_2_1,
- DMA_3_1,
- DMA_4_1,
- DMA_5_1,
- DMA_6_1,
- DMA_7_1,
- FRONTEND_TS0_1 = 96,
- FRONTEND_TS1_1,
- FRONTEND_TS2_1,
- FRONTEND_TS3_1,
- FRONTEND_TS4_1,
- FRONTEND_TS5_1,
- FRONTEND_TS6_1,
- FRONTEND_TS7_1,
+ DMA_0 = 0,
+ DMA_1,
+ DMA_2,
+ DMA_3,
+ DMA_4,
+ DMA_5,
+ DMA_6,
+ DMA_7,
+ FRONTEND_TS0 = 32,
+ FRONTEND_TS1,
+ FRONTEND_TS2,
+ FRONTEND_TS3,
+ FRONTEND_TS4,
+ FRONTEND_TS5,
+ FRONTEND_TS6,
+ FRONTEND_TS7,
+ DMA_0_1 = 64,
+ DMA_1_1,
+ DMA_2_1,
+ DMA_3_1,
+ DMA_4_1,
+ DMA_5_1,
+ DMA_6_1,
+ DMA_7_1,
+ FRONTEND_TS0_1 = 96,
+ FRONTEND_TS1_1,
+ FRONTEND_TS2_1,
+ FRONTEND_TS3_1,
+ FRONTEND_TS4_1,
+ FRONTEND_TS5_1,
+ FRONTEND_TS6_1,
+ FRONTEND_TS7_1,
};
/*define filter mem_info type*/
enum {
- DMX_VIDEO_TYPE = 0,
- DMX_AUDIO_TYPE,
- DMX_SUBTITLE_TYPE,
- DMX_TELETEXT_TYPE,
- DMX_SECTION_TYPE,
+ DMX_VIDEO_TYPE = 0,
+ DMX_AUDIO_TYPE,
+ DMX_SUBTITLE_TYPE,
+ DMX_TELETEXT_TYPE,
+ DMX_SECTION_TYPE,
};
struct filter_mem_info {
- __u32 type;
- __u32 pid;
- struct dmx_mem_info filter_info;
+ __u32 type;
+ __u32 pid;
+ struct dmx_mem_info filter_info;
};
struct dmx_filter_mem_info {
- __u32 filter_num;
- struct filter_mem_info info[40];
+ __u32 filter_num;
+ struct filter_mem_info info[40];
};
struct dvr_mem_info {
- __u32 wp_offset;
+ __u32 wp_offset;
+};
+
+struct decoder_mem_info {
+ __u32 rp_phy;
};
#endif
@@ -336,6 +518,22 @@
#define DMX_GET_STC _IOWR('o', 50, struct dmx_stc)
#define DMX_ADD_PID _IOW('o', 51, __u16)
#define DMX_REMOVE_PID _IOW('o', 52, __u16)
+#if !defined(__KERNEL__)
+
+/* This is needed for legacy userspace support */
+typedef enum dmx_output dmx_output_t;
+typedef enum dmx_input dmx_input_t;
+typedef enum dmx_ts_pes dmx_pes_type_t;
+typedef struct dmx_filter dmx_filter_t;
+
+#endif
+
+#define DMX_REQBUFS _IOWR('o', 60, struct dmx_requestbuffers)
+#define DMX_QUERYBUF _IOWR('o', 61, struct dmx_buffer)
+#define DMX_EXPBUF _IOWR('o', 62, struct dmx_exportbuffer)
+#define DMX_QBUF _IOWR('o', 63, struct dmx_buffer)
+#define DMX_DQBUF _IOWR('o', 64, struct dmx_buffer)
+
#ifdef CONFIG_AMLOGIC_DVB_COMPAT
#define DMX_SET_INPUT _IO('o', 80)
#define DMX_GET_MEM_INFO _IOR('o', 81, struct dmx_mem_info)
@@ -343,9 +541,9 @@
#define DMX_GET_HW_SOURCE _IOR('o', 83, int)
#define DMX_GET_FILTER_MEM_INFO _IOR('o', 84, struct dmx_filter_mem_info)
/*just for dvr sec mem, please call before DMX_SET_PES_FILTER*/
-#define DMX_SET_SEC_MEM _IOW('o', 85, struct dmx_sec_mem)
-#define DMX_GET_DVR_MEM _IOR('o', 86, struct dvr_mem_info)
-#define DMX_REMAP_PID _IOR('o', 87, __u16[2])
+#define DMX_SET_SEC_MEM _IOW('o', 85, struct dmx_sec_mem)
+#define DMX_GET_DVR_MEM _IOR('o', 86, struct dvr_mem_info)
+#define DMX_REMAP_PID _IOR('o', 87, __u16[2])
+#define DMX_SET_DECODE_INFO _IOW('o', 88, struct decoder_mem_info)
#endif
-
-#endif /* _UAPI_DVBDMX_H_ */
+#endif /* _DVBDMX_H_ */
diff --git a/include/frontend.h b/include/frontend.h
index 3235157..d47f990 100644
--- a/include/frontend.h
+++ b/include/frontend.h
@@ -771,7 +771,6 @@
};
};
-
struct atv_status_s {
unsigned char atv_lock;/*notlocked:0,locked 1*/
v4l2_std_id std;