11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * demux.h 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2002 Convergence GmbH 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * based on code: 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2000 Nokia Research Center 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Tampere, FINLAND 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modify it under the terms of the GNU Lesser General Public License 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * as published by the Free Software Foundation; either version 2.1 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the License, or (at your option) any later version. 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details. 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU Lesser General Public License 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __DEMUX_H 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __DEMUX_H 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h> 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/errno.h> 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/list.h> 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/time.h> 33c05100528efe997a27d841230f9f5b2f4adf3d0fAndreas Oberritter#include <linux/dvb/dmx.h> 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Common definitions */ 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter. 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef DMX_MAX_FILTER_SIZE 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_MAX_FILTER_SIZE 18 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter. 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 51b3967d6c251d8482fe42a1aad3cc292ee04c0a6bMark Adams#ifndef DMX_MAX_SECTION_SIZE 52b3967d6c251d8482fe42a1aad3cc292ee04c0a6bMark Adams#define DMX_MAX_SECTION_SIZE 4096 53b3967d6c251d8482fe42a1aad3cc292ee04c0a6bMark Adams#endif 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef DMX_MAX_SECFEED_SIZE 55b3967d6c251d8482fe42a1aad3cc292ee04c0a6bMark Adams#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188) 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * enum dmx_success: Success codes for the Demux Callback API. 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum dmx_success { 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_OK = 0, /* Received Ok */ 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_LENGTH_ERROR, /* Incorrect length */ 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */ 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_CRC_ERROR, /* Incorrect CRC */ 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRAME_ERROR, /* Frame alignment error */ 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FIFO_ERROR, /* Receiver FIFO overrun */ 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_MISSED_ERROR /* Receiver missed packet */ 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} ; 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* TS packet reception */ 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* TS filter type for set() */ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */ 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds payload (<=184 bytes per packet) to callback */ 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TS_DECODER 4 /* send stream to built-in decoder (if present) */ 834a24ce3a17ee713056db0a24cf558bd595211302Andreas Oberritter#define TS_DEMUX 8 /* in case TS_PACKET is set, send the TS to 844a24ce3a17ee713056db0a24cf558bd595211302Andreas Oberritter the demux device, not to the dvr device */ 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_ts_feed { 87afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int is_filtering; /* Set to non-zero when filtering in progress */ 88afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab struct dmx_demux *parent; /* Back-pointer */ 89afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab void *priv; /* Pointer to private data of the API client */ 90afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*set) (struct dmx_ts_feed *feed, 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 pid, 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int type, 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds enum dmx_ts_pes pes_type, 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t circular_buffer_size, 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct timespec timeout); 96afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*start_filtering) (struct dmx_ts_feed* feed); 97afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*stop_filtering) (struct dmx_ts_feed* feed); 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Section reception */ 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_section_filter { 105afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab u8 filter_value [DMX_MAX_FILTER_SIZE]; 106afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab u8 filter_mask [DMX_MAX_FILTER_SIZE]; 107afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab u8 filter_mode [DMX_MAX_FILTER_SIZE]; 108afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab struct dmx_section_feed* parent; /* Back-pointer */ 109afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab void* priv; /* Pointer to private data of the API client */ 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_section_feed { 113afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int is_filtering; /* Set to non-zero when filtering in progress */ 114afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab struct dmx_demux* parent; /* Back-pointer */ 115afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab void* priv; /* Pointer to private data of the API client */ 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 117afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int check_crc; 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 crc_val; 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 120afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab u8 *secbuf; 121afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab u8 secbuf_base[DMX_MAX_SECFEED_SIZE]; 122afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab u16 secbufp, seclen, tsfeedp; 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 124afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*set) (struct dmx_section_feed* feed, 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 pid, 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t circular_buffer_size, 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int check_crc); 128afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*allocate_filter) (struct dmx_section_feed* feed, 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_filter** filter); 130afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*release_filter) (struct dmx_section_feed* feed, 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_filter* filter); 132afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*start_filtering) (struct dmx_section_feed* feed); 133afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*stop_filtering) (struct dmx_section_feed* feed); 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Callback functions */ 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef int (*dmx_ts_cb) ( const u8 * buffer1, 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer1_length, 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds const u8 * buffer2, 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer2_length, 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_ts_feed* source, 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds enum dmx_success success); 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef int (*dmx_section_cb) ( const u8 * buffer1, 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer1_len, 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds const u8 * buffer2, 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer2_len, 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_filter * source, 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds enum dmx_success success); 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* DVB Front-End */ 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum dmx_frontend_source { 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_MEMORY_FE, 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRONTEND_0, 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRONTEND_1, 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRONTEND_2, 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRONTEND_3, 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_STREAM_0, /* external stream input, e.g. LVDS */ 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_STREAM_1, 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_STREAM_2, 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_STREAM_3 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_frontend { 171afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab struct list_head connectivity_list; /* List of front-ends that can 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds be connected to a particular 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds demux */ 174afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab enum dmx_frontend_source source; 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* MPEG-2 TS Demux */ 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1828a59822f68996c1f525a8ed87447a4dbc27ada0bAlexey Dobriyan * Flags OR'ed in the capabilities field of struct dmx_demux. 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_FILTERING 1 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_PES_FILTERING 2 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_SECTION_FILTERING 4 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */ 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_CRC_CHECKING 16 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_DESCRAMBLING 32 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Demux resource type identifier. 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/ 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DMX_FE_ENTRY(): Casts elements in the list of registered 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * front-ends from the generic type struct list_head 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to the type * struct dmx_frontend 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *. 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/ 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list) 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_demux { 206afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab u32 capabilities; /* Bitfield of capability flags */ 207afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab struct dmx_frontend* frontend; /* Front-end connected to the demux */ 208afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab void* priv; /* Pointer to private data of the API client */ 209afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*open) (struct dmx_demux* demux); 210afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*close) (struct dmx_demux* demux); 211947a080037c6ae47cfe5072eadbd189e3da27ecdAl Viro int (*write) (struct dmx_demux* demux, const char __user *buf, size_t count); 212afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*allocate_ts_feed) (struct dmx_demux* demux, 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_ts_feed** feed, 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dmx_ts_cb callback); 215afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*release_ts_feed) (struct dmx_demux* demux, 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_ts_feed* feed); 217afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*allocate_section_feed) (struct dmx_demux* demux, 2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_feed** feed, 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dmx_section_cb callback); 220afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*release_section_feed) (struct dmx_demux* demux, 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_feed* feed); 222afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*add_frontend) (struct dmx_demux* demux, 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_frontend* frontend); 224afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*remove_frontend) (struct dmx_demux* demux, 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_frontend* frontend); 226afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab struct list_head* (*get_frontends) (struct dmx_demux* demux); 227afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*connect_frontend) (struct dmx_demux* demux, 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_frontend* frontend); 229afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*disconnect_frontend) (struct dmx_demux* demux); 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 231afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids); 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 233c05100528efe997a27d841230f9f5b2f4adf3d0fAndreas Oberritter int (*get_caps) (struct dmx_demux* demux, struct dmx_caps *caps); 234c05100528efe997a27d841230f9f5b2f4adf3d0fAndreas Oberritter 235c05100528efe997a27d841230f9f5b2f4adf3d0fAndreas Oberritter int (*set_source) (struct dmx_demux* demux, const dmx_source_t *src); 236c05100528efe997a27d841230f9f5b2f4adf3d0fAndreas Oberritter 237afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab int (*get_stc) (struct dmx_demux* demux, unsigned int num, 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u64 *stc, unsigned int *base); 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* #ifndef __DEMUX_H */ 242