1fada1935SMauro Carvalho Chehab /* 2fada1935SMauro Carvalho Chehab * dvb_demux.h: DVB kernel demux API 3fada1935SMauro Carvalho Chehab * 4fada1935SMauro Carvalho Chehab * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler 5fada1935SMauro Carvalho Chehab * for convergence integrated media GmbH 6fada1935SMauro Carvalho Chehab * 7fada1935SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or 8fada1935SMauro Carvalho Chehab * modify it under the terms of the GNU Lesser General Public License 9fada1935SMauro Carvalho Chehab * as published by the Free Software Foundation; either version 2.1 10fada1935SMauro Carvalho Chehab * of the License, or (at your option) any later version. 11fada1935SMauro Carvalho Chehab * 12fada1935SMauro Carvalho Chehab * This program is distributed in the hope that it will be useful, 13fada1935SMauro Carvalho Chehab * but WITHOUT ANY WARRANTY; without even the implied warranty of 14fada1935SMauro Carvalho Chehab * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15fada1935SMauro Carvalho Chehab * GNU General Public License for more details. 16fada1935SMauro Carvalho Chehab * 17fada1935SMauro Carvalho Chehab */ 18fada1935SMauro Carvalho Chehab 19fada1935SMauro Carvalho Chehab #ifndef _DVB_DEMUX_H_ 20fada1935SMauro Carvalho Chehab #define _DVB_DEMUX_H_ 21fada1935SMauro Carvalho Chehab 22fada1935SMauro Carvalho Chehab #include <linux/time.h> 23fada1935SMauro Carvalho Chehab #include <linux/timer.h> 24fada1935SMauro Carvalho Chehab #include <linux/spinlock.h> 25fada1935SMauro Carvalho Chehab #include <linux/mutex.h> 26fada1935SMauro Carvalho Chehab 27fada1935SMauro Carvalho Chehab #include <media/demux.h> 28fada1935SMauro Carvalho Chehab 29fada1935SMauro Carvalho Chehab /** 30fada1935SMauro Carvalho Chehab * enum dvb_dmx_filter_type - type of demux feed. 31fada1935SMauro Carvalho Chehab * 32fada1935SMauro Carvalho Chehab * @DMX_TYPE_TS: feed is in TS mode. 33fada1935SMauro Carvalho Chehab * @DMX_TYPE_SEC: feed is in Section mode. 34fada1935SMauro Carvalho Chehab */ 35fada1935SMauro Carvalho Chehab enum dvb_dmx_filter_type { 36fada1935SMauro Carvalho Chehab DMX_TYPE_TS, 37fada1935SMauro Carvalho Chehab DMX_TYPE_SEC, 38fada1935SMauro Carvalho Chehab }; 39fada1935SMauro Carvalho Chehab 40fada1935SMauro Carvalho Chehab /** 41fada1935SMauro Carvalho Chehab * enum dvb_dmx_state - state machine for a demux filter. 42fada1935SMauro Carvalho Chehab * 43fada1935SMauro Carvalho Chehab * @DMX_STATE_FREE: indicates that the filter is freed. 44fada1935SMauro Carvalho Chehab * @DMX_STATE_ALLOCATED: indicates that the filter was allocated 45fada1935SMauro Carvalho Chehab * to be used. 46fada1935SMauro Carvalho Chehab * @DMX_STATE_READY: indicates that the filter is ready 47fada1935SMauro Carvalho Chehab * to be used. 48fada1935SMauro Carvalho Chehab * @DMX_STATE_GO: indicates that the filter is running. 49fada1935SMauro Carvalho Chehab */ 50fada1935SMauro Carvalho Chehab enum dvb_dmx_state { 51fada1935SMauro Carvalho Chehab DMX_STATE_FREE, 52fada1935SMauro Carvalho Chehab DMX_STATE_ALLOCATED, 53fada1935SMauro Carvalho Chehab DMX_STATE_READY, 54fada1935SMauro Carvalho Chehab DMX_STATE_GO, 55fada1935SMauro Carvalho Chehab }; 56fada1935SMauro Carvalho Chehab 57fada1935SMauro Carvalho Chehab #define DVB_DEMUX_MASK_MAX 18 58fada1935SMauro Carvalho Chehab 59fada1935SMauro Carvalho Chehab #define MAX_PID 0x1fff 60fada1935SMauro Carvalho Chehab 61fada1935SMauro Carvalho Chehab #define SPEED_PKTS_INTERVAL 50000 62fada1935SMauro Carvalho Chehab 63fada1935SMauro Carvalho Chehab /** 64fada1935SMauro Carvalho Chehab * struct dvb_demux_filter - Describes a DVB demux section filter. 65fada1935SMauro Carvalho Chehab * 66fada1935SMauro Carvalho Chehab * @filter: Section filter as defined by &struct dmx_section_filter. 67fada1935SMauro Carvalho Chehab * @maskandmode: logical ``and`` bit mask. 68fada1935SMauro Carvalho Chehab * @maskandnotmode: logical ``and not`` bit mask. 69fada1935SMauro Carvalho Chehab * @doneq: flag that indicates when a filter is ready. 70fada1935SMauro Carvalho Chehab * @next: pointer to the next section filter. 71fada1935SMauro Carvalho Chehab * @feed: &struct dvb_demux_feed pointer. 72fada1935SMauro Carvalho Chehab * @index: index of the used demux filter. 73fada1935SMauro Carvalho Chehab * @state: state of the filter as described by &enum dvb_dmx_state. 74fada1935SMauro Carvalho Chehab * @type: type of the filter as described 75fada1935SMauro Carvalho Chehab * by &enum dvb_dmx_filter_type. 76fada1935SMauro Carvalho Chehab */ 77fada1935SMauro Carvalho Chehab 78fada1935SMauro Carvalho Chehab struct dvb_demux_filter { 79fada1935SMauro Carvalho Chehab struct dmx_section_filter filter; 80fada1935SMauro Carvalho Chehab u8 maskandmode[DMX_MAX_FILTER_SIZE]; 81fada1935SMauro Carvalho Chehab u8 maskandnotmode[DMX_MAX_FILTER_SIZE]; 82fada1935SMauro Carvalho Chehab bool doneq; 83fada1935SMauro Carvalho Chehab 84fada1935SMauro Carvalho Chehab struct dvb_demux_filter *next; 85fada1935SMauro Carvalho Chehab struct dvb_demux_feed *feed; 86fada1935SMauro Carvalho Chehab int index; 87fada1935SMauro Carvalho Chehab enum dvb_dmx_state state; 88fada1935SMauro Carvalho Chehab enum dvb_dmx_filter_type type; 89fada1935SMauro Carvalho Chehab 90fada1935SMauro Carvalho Chehab /* private: used only by av7110 */ 91fada1935SMauro Carvalho Chehab u16 hw_handle; 92fada1935SMauro Carvalho Chehab }; 93fada1935SMauro Carvalho Chehab 94fada1935SMauro Carvalho Chehab /** 95fada1935SMauro Carvalho Chehab * struct dvb_demux_feed - describes a DVB field 96fada1935SMauro Carvalho Chehab * 97fada1935SMauro Carvalho Chehab * @feed: a union describing a digital TV feed. 98fada1935SMauro Carvalho Chehab * Depending on the feed type, it can be either 99fada1935SMauro Carvalho Chehab * @feed.ts or @feed.sec. 100fada1935SMauro Carvalho Chehab * @feed.ts: a &struct dmx_ts_feed pointer. 101fada1935SMauro Carvalho Chehab * For TS feed only. 102fada1935SMauro Carvalho Chehab * @feed.sec: a &struct dmx_section_feed pointer. 103fada1935SMauro Carvalho Chehab * For section feed only. 104fada1935SMauro Carvalho Chehab * @cb: a union describing digital TV callbacks. 105fada1935SMauro Carvalho Chehab * Depending on the feed type, it can be either 106fada1935SMauro Carvalho Chehab * @cb.ts or @cb.sec. 107fada1935SMauro Carvalho Chehab * @cb.ts: a dmx_ts_cb() calback function pointer. 108fada1935SMauro Carvalho Chehab * For TS feed only. 109fada1935SMauro Carvalho Chehab * @cb.sec: a dmx_section_cb() callback function pointer. 110fada1935SMauro Carvalho Chehab * For section feed only. 111fada1935SMauro Carvalho Chehab * @demux: pointer to &struct dvb_demux. 112fada1935SMauro Carvalho Chehab * @priv: private data that can optionally be used by a DVB driver. 113fada1935SMauro Carvalho Chehab * @type: type of the filter, as defined by &enum dvb_dmx_filter_type. 114fada1935SMauro Carvalho Chehab * @state: state of the filter as defined by &enum dvb_dmx_state. 115fada1935SMauro Carvalho Chehab * @pid: PID to be filtered. 116fada1935SMauro Carvalho Chehab * @timeout: feed timeout. 117fada1935SMauro Carvalho Chehab * @filter: pointer to &struct dvb_demux_filter. 118*fdbeb962SMauro Carvalho Chehab * @buffer_flags: Buffer flags used to report discontinuity users via DVB 119*fdbeb962SMauro Carvalho Chehab * memory mapped API, as defined by &enum dmx_buffer_flags. 120fada1935SMauro Carvalho Chehab * @ts_type: type of TS, as defined by &enum ts_filter_type. 121fada1935SMauro Carvalho Chehab * @pes_type: type of PES, as defined by &enum dmx_ts_pes. 122fada1935SMauro Carvalho Chehab * @cc: MPEG-TS packet continuity counter 123fada1935SMauro Carvalho Chehab * @pusi_seen: if true, indicates that a discontinuity was detected. 124fada1935SMauro Carvalho Chehab * it is used to prevent feeding of garbage from previous section. 125fada1935SMauro Carvalho Chehab * @peslen: length of the PES (Packet Elementary Stream). 126fada1935SMauro Carvalho Chehab * @list_head: head for the list of digital TV demux feeds. 127fada1935SMauro Carvalho Chehab * @index: a unique index for each feed. Can be used as hardware 128fada1935SMauro Carvalho Chehab * pid filter index. 129fada1935SMauro Carvalho Chehab */ 130fada1935SMauro Carvalho Chehab struct dvb_demux_feed { 131fada1935SMauro Carvalho Chehab union { 132fada1935SMauro Carvalho Chehab struct dmx_ts_feed ts; 133fada1935SMauro Carvalho Chehab struct dmx_section_feed sec; 134fada1935SMauro Carvalho Chehab } feed; 135fada1935SMauro Carvalho Chehab 136fada1935SMauro Carvalho Chehab union { 137fada1935SMauro Carvalho Chehab dmx_ts_cb ts; 138fada1935SMauro Carvalho Chehab dmx_section_cb sec; 139fada1935SMauro Carvalho Chehab } cb; 140fada1935SMauro Carvalho Chehab 141fada1935SMauro Carvalho Chehab struct dvb_demux *demux; 142fada1935SMauro Carvalho Chehab void *priv; 143fada1935SMauro Carvalho Chehab enum dvb_dmx_filter_type type; 144fada1935SMauro Carvalho Chehab enum dvb_dmx_state state; 145fada1935SMauro Carvalho Chehab u16 pid; 146fada1935SMauro Carvalho Chehab 147fada1935SMauro Carvalho Chehab ktime_t timeout; 148fada1935SMauro Carvalho Chehab struct dvb_demux_filter *filter; 149fada1935SMauro Carvalho Chehab 150*fdbeb962SMauro Carvalho Chehab u32 buffer_flags; 151*fdbeb962SMauro Carvalho Chehab 152fada1935SMauro Carvalho Chehab enum ts_filter_type ts_type; 153fada1935SMauro Carvalho Chehab enum dmx_ts_pes pes_type; 154fada1935SMauro Carvalho Chehab 155fada1935SMauro Carvalho Chehab int cc; 156fada1935SMauro Carvalho Chehab bool pusi_seen; 157fada1935SMauro Carvalho Chehab 158fada1935SMauro Carvalho Chehab u16 peslen; 159fada1935SMauro Carvalho Chehab 160fada1935SMauro Carvalho Chehab struct list_head list_head; 161fada1935SMauro Carvalho Chehab unsigned int index; 162fada1935SMauro Carvalho Chehab }; 163fada1935SMauro Carvalho Chehab 164fada1935SMauro Carvalho Chehab /** 165fada1935SMauro Carvalho Chehab * struct dvb_demux - represents a digital TV demux 166fada1935SMauro Carvalho Chehab * @dmx: embedded &struct dmx_demux with demux capabilities 167fada1935SMauro Carvalho Chehab * and callbacks. 168fada1935SMauro Carvalho Chehab * @priv: private data that can optionally be used by 169fada1935SMauro Carvalho Chehab * a DVB driver. 170fada1935SMauro Carvalho Chehab * @filternum: maximum amount of DVB filters. 171fada1935SMauro Carvalho Chehab * @feednum: maximum amount of DVB feeds. 172fada1935SMauro Carvalho Chehab * @start_feed: callback routine to be called in order to start 173fada1935SMauro Carvalho Chehab * a DVB feed. 174fada1935SMauro Carvalho Chehab * @stop_feed: callback routine to be called in order to stop 175fada1935SMauro Carvalho Chehab * a DVB feed. 176fada1935SMauro Carvalho Chehab * @write_to_decoder: callback routine to be called if the feed is TS and 177fada1935SMauro Carvalho Chehab * it is routed to an A/V decoder, when a new TS packet 178fada1935SMauro Carvalho Chehab * is received. 179fada1935SMauro Carvalho Chehab * Used only on av7110-av.c. 180fada1935SMauro Carvalho Chehab * @check_crc32: callback routine to check CRC. If not initialized, 181fada1935SMauro Carvalho Chehab * dvb_demux will use an internal one. 182fada1935SMauro Carvalho Chehab * @memcopy: callback routine to memcopy received data. 183fada1935SMauro Carvalho Chehab * If not initialized, dvb_demux will default to memcpy(). 184fada1935SMauro Carvalho Chehab * @users: counter for the number of demux opened file descriptors. 185fada1935SMauro Carvalho Chehab * Currently, it is limited to 10 users. 186fada1935SMauro Carvalho Chehab * @filter: pointer to &struct dvb_demux_filter. 187fada1935SMauro Carvalho Chehab * @feed: pointer to &struct dvb_demux_feed. 188fada1935SMauro Carvalho Chehab * @frontend_list: &struct list_head with frontends used by the demux. 189fada1935SMauro Carvalho Chehab * @pesfilter: array of &struct dvb_demux_feed with the PES types 190fada1935SMauro Carvalho Chehab * that will be filtered. 191fada1935SMauro Carvalho Chehab * @pids: list of filtered program IDs. 192fada1935SMauro Carvalho Chehab * @feed_list: &struct list_head with feeds. 193fada1935SMauro Carvalho Chehab * @tsbuf: temporary buffer used internally to store TS packets. 194fada1935SMauro Carvalho Chehab * @tsbufp: temporary buffer index used internally. 195fada1935SMauro Carvalho Chehab * @mutex: pointer to &struct mutex used to protect feed set 196fada1935SMauro Carvalho Chehab * logic. 197fada1935SMauro Carvalho Chehab * @lock: pointer to &spinlock_t, used to protect buffer handling. 198fada1935SMauro Carvalho Chehab * @cnt_storage: buffer used for TS/TEI continuity check. 199fada1935SMauro Carvalho Chehab * @speed_last_time: &ktime_t used for TS speed check. 200fada1935SMauro Carvalho Chehab * @speed_pkts_cnt: packets count used for TS speed check. 201fada1935SMauro Carvalho Chehab */ 202fada1935SMauro Carvalho Chehab struct dvb_demux { 203fada1935SMauro Carvalho Chehab struct dmx_demux dmx; 204fada1935SMauro Carvalho Chehab void *priv; 205fada1935SMauro Carvalho Chehab int filternum; 206fada1935SMauro Carvalho Chehab int feednum; 207fada1935SMauro Carvalho Chehab int (*start_feed)(struct dvb_demux_feed *feed); 208fada1935SMauro Carvalho Chehab int (*stop_feed)(struct dvb_demux_feed *feed); 209fada1935SMauro Carvalho Chehab int (*write_to_decoder)(struct dvb_demux_feed *feed, 210fada1935SMauro Carvalho Chehab const u8 *buf, size_t len); 211fada1935SMauro Carvalho Chehab u32 (*check_crc32)(struct dvb_demux_feed *feed, 212fada1935SMauro Carvalho Chehab const u8 *buf, size_t len); 213fada1935SMauro Carvalho Chehab void (*memcopy)(struct dvb_demux_feed *feed, u8 *dst, 214fada1935SMauro Carvalho Chehab const u8 *src, size_t len); 215fada1935SMauro Carvalho Chehab 216fada1935SMauro Carvalho Chehab int users; 217fada1935SMauro Carvalho Chehab #define MAX_DVB_DEMUX_USERS 10 218fada1935SMauro Carvalho Chehab struct dvb_demux_filter *filter; 219fada1935SMauro Carvalho Chehab struct dvb_demux_feed *feed; 220fada1935SMauro Carvalho Chehab 221fada1935SMauro Carvalho Chehab struct list_head frontend_list; 222fada1935SMauro Carvalho Chehab 223fada1935SMauro Carvalho Chehab struct dvb_demux_feed *pesfilter[DMX_PES_OTHER]; 224fada1935SMauro Carvalho Chehab u16 pids[DMX_PES_OTHER]; 225fada1935SMauro Carvalho Chehab 226fada1935SMauro Carvalho Chehab #define DMX_MAX_PID 0x2000 227fada1935SMauro Carvalho Chehab struct list_head feed_list; 228fada1935SMauro Carvalho Chehab u8 tsbuf[204]; 229fada1935SMauro Carvalho Chehab int tsbufp; 230fada1935SMauro Carvalho Chehab 231fada1935SMauro Carvalho Chehab struct mutex mutex; 232fada1935SMauro Carvalho Chehab spinlock_t lock; 233fada1935SMauro Carvalho Chehab 234fada1935SMauro Carvalho Chehab uint8_t *cnt_storage; /* for TS continuity check */ 235fada1935SMauro Carvalho Chehab 236fada1935SMauro Carvalho Chehab ktime_t speed_last_time; /* for TS speed check */ 237fada1935SMauro Carvalho Chehab uint32_t speed_pkts_cnt; /* for TS speed check */ 238fada1935SMauro Carvalho Chehab 239fada1935SMauro Carvalho Chehab /* private: used only on av7110 */ 240fada1935SMauro Carvalho Chehab int playing; 241fada1935SMauro Carvalho Chehab int recording; 242fada1935SMauro Carvalho Chehab }; 243fada1935SMauro Carvalho Chehab 244fada1935SMauro Carvalho Chehab /** 245fada1935SMauro Carvalho Chehab * dvb_dmx_init - initialize a digital TV demux struct. 246fada1935SMauro Carvalho Chehab * 247fada1935SMauro Carvalho Chehab * @demux: &struct dvb_demux to be initialized. 248fada1935SMauro Carvalho Chehab * 249fada1935SMauro Carvalho Chehab * Before being able to register a digital TV demux struct, drivers 250fada1935SMauro Carvalho Chehab * should call this routine. On its typical usage, some fields should 251fada1935SMauro Carvalho Chehab * be initialized at the driver before calling it. 252fada1935SMauro Carvalho Chehab * 253fada1935SMauro Carvalho Chehab * A typical usecase is:: 254fada1935SMauro Carvalho Chehab * 255fada1935SMauro Carvalho Chehab * dvb->demux.dmx.capabilities = 256fada1935SMauro Carvalho Chehab * DMX_TS_FILTERING | DMX_SECTION_FILTERING | 257fada1935SMauro Carvalho Chehab * DMX_MEMORY_BASED_FILTERING; 258fada1935SMauro Carvalho Chehab * dvb->demux.priv = dvb; 259fada1935SMauro Carvalho Chehab * dvb->demux.filternum = 256; 260fada1935SMauro Carvalho Chehab * dvb->demux.feednum = 256; 261fada1935SMauro Carvalho Chehab * dvb->demux.start_feed = driver_start_feed; 262fada1935SMauro Carvalho Chehab * dvb->demux.stop_feed = driver_stop_feed; 263fada1935SMauro Carvalho Chehab * ret = dvb_dmx_init(&dvb->demux); 264fada1935SMauro Carvalho Chehab * if (ret < 0) 265fada1935SMauro Carvalho Chehab * return ret; 266fada1935SMauro Carvalho Chehab */ 267fada1935SMauro Carvalho Chehab int dvb_dmx_init(struct dvb_demux *demux); 268fada1935SMauro Carvalho Chehab 269fada1935SMauro Carvalho Chehab /** 270fada1935SMauro Carvalho Chehab * dvb_dmx_release - releases a digital TV demux internal buffers. 271fada1935SMauro Carvalho Chehab * 272fada1935SMauro Carvalho Chehab * @demux: &struct dvb_demux to be released. 273fada1935SMauro Carvalho Chehab * 274fada1935SMauro Carvalho Chehab * The DVB core internally allocates data at @demux. This routine 275fada1935SMauro Carvalho Chehab * releases those data. Please notice that the struct itelf is not 276fada1935SMauro Carvalho Chehab * released, as it can be embedded on other structs. 277fada1935SMauro Carvalho Chehab */ 278fada1935SMauro Carvalho Chehab void dvb_dmx_release(struct dvb_demux *demux); 279fada1935SMauro Carvalho Chehab 280fada1935SMauro Carvalho Chehab /** 281fada1935SMauro Carvalho Chehab * dvb_dmx_swfilter_packets - use dvb software filter for a buffer with 282fada1935SMauro Carvalho Chehab * multiple MPEG-TS packets with 188 bytes each. 283fada1935SMauro Carvalho Chehab * 284fada1935SMauro Carvalho Chehab * @demux: pointer to &struct dvb_demux 285fada1935SMauro Carvalho Chehab * @buf: buffer with data to be filtered 286fada1935SMauro Carvalho Chehab * @count: number of MPEG-TS packets with size of 188. 287fada1935SMauro Carvalho Chehab * 288fada1935SMauro Carvalho Chehab * The routine will discard a DVB packet that don't start with 0x47. 289fada1935SMauro Carvalho Chehab * 290fada1935SMauro Carvalho Chehab * Use this routine if the DVB demux fills MPEG-TS buffers that are 291fada1935SMauro Carvalho Chehab * already aligned. 292fada1935SMauro Carvalho Chehab * 293fada1935SMauro Carvalho Chehab * NOTE: The @buf size should have size equal to ``count * 188``. 294fada1935SMauro Carvalho Chehab */ 295fada1935SMauro Carvalho Chehab void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, 296fada1935SMauro Carvalho Chehab size_t count); 297fada1935SMauro Carvalho Chehab 298fada1935SMauro Carvalho Chehab /** 299fada1935SMauro Carvalho Chehab * dvb_dmx_swfilter - use dvb software filter for a buffer with 300fada1935SMauro Carvalho Chehab * multiple MPEG-TS packets with 188 bytes each. 301fada1935SMauro Carvalho Chehab * 302fada1935SMauro Carvalho Chehab * @demux: pointer to &struct dvb_demux 303fada1935SMauro Carvalho Chehab * @buf: buffer with data to be filtered 304fada1935SMauro Carvalho Chehab * @count: number of MPEG-TS packets with size of 188. 305fada1935SMauro Carvalho Chehab * 306fada1935SMauro Carvalho Chehab * If a DVB packet doesn't start with 0x47, it will seek for the first 307fada1935SMauro Carvalho Chehab * byte that starts with 0x47. 308fada1935SMauro Carvalho Chehab * 309fada1935SMauro Carvalho Chehab * Use this routine if the DVB demux fill buffers that may not start with 310fada1935SMauro Carvalho Chehab * a packet start mark (0x47). 311fada1935SMauro Carvalho Chehab * 312fada1935SMauro Carvalho Chehab * NOTE: The @buf size should have size equal to ``count * 188``. 313fada1935SMauro Carvalho Chehab */ 314fada1935SMauro Carvalho Chehab void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count); 315fada1935SMauro Carvalho Chehab 316fada1935SMauro Carvalho Chehab /** 317fada1935SMauro Carvalho Chehab * dvb_dmx_swfilter_204 - use dvb software filter for a buffer with 318fada1935SMauro Carvalho Chehab * multiple MPEG-TS packets with 204 bytes each. 319fada1935SMauro Carvalho Chehab * 320fada1935SMauro Carvalho Chehab * @demux: pointer to &struct dvb_demux 321fada1935SMauro Carvalho Chehab * @buf: buffer with data to be filtered 322fada1935SMauro Carvalho Chehab * @count: number of MPEG-TS packets with size of 204. 323fada1935SMauro Carvalho Chehab * 324fada1935SMauro Carvalho Chehab * If a DVB packet doesn't start with 0x47, it will seek for the first 325fada1935SMauro Carvalho Chehab * byte that starts with 0x47. 326fada1935SMauro Carvalho Chehab * 327fada1935SMauro Carvalho Chehab * Use this routine if the DVB demux fill buffers that may not start with 328fada1935SMauro Carvalho Chehab * a packet start mark (0x47). 329fada1935SMauro Carvalho Chehab * 330fada1935SMauro Carvalho Chehab * NOTE: The @buf size should have size equal to ``count * 204``. 331fada1935SMauro Carvalho Chehab */ 332fada1935SMauro Carvalho Chehab void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, 333fada1935SMauro Carvalho Chehab size_t count); 334fada1935SMauro Carvalho Chehab 335fada1935SMauro Carvalho Chehab /** 336fada1935SMauro Carvalho Chehab * dvb_dmx_swfilter_raw - make the raw data available to userspace without 337fada1935SMauro Carvalho Chehab * filtering 338fada1935SMauro Carvalho Chehab * 339fada1935SMauro Carvalho Chehab * @demux: pointer to &struct dvb_demux 340fada1935SMauro Carvalho Chehab * @buf: buffer with data 341fada1935SMauro Carvalho Chehab * @count: number of packets to be passed. The actual size of each packet 342fada1935SMauro Carvalho Chehab * depends on the &dvb_demux->feed->cb.ts logic. 343fada1935SMauro Carvalho Chehab * 344fada1935SMauro Carvalho Chehab * Use it if the driver needs to deliver the raw payload to userspace without 345fada1935SMauro Carvalho Chehab * passing through the kernel demux. That is meant to support some 346fada1935SMauro Carvalho Chehab * delivery systems that aren't based on MPEG-TS. 347fada1935SMauro Carvalho Chehab * 348fada1935SMauro Carvalho Chehab * This function relies on &dvb_demux->feed->cb.ts to actually handle the 349fada1935SMauro Carvalho Chehab * buffer. 350fada1935SMauro Carvalho Chehab */ 351fada1935SMauro Carvalho Chehab void dvb_dmx_swfilter_raw(struct dvb_demux *demux, const u8 *buf, 352fada1935SMauro Carvalho Chehab size_t count); 353fada1935SMauro Carvalho Chehab 354fada1935SMauro Carvalho Chehab #endif /* _DVB_DEMUX_H_ */ 355