![]() |
|
|||
0001 /* 0002 * demux.h 0003 * 0004 * The Kernel Digital TV Demux kABI defines a driver-internal interface for 0005 * registering low-level, hardware specific driver to a hardware independent 0006 * demux layer. 0007 * 0008 * Copyright (c) 2002 Convergence GmbH 0009 * 0010 * based on code: 0011 * Copyright (c) 2000 Nokia Research Center 0012 * Tampere, FINLAND 0013 * 0014 * This program is free software; you can redistribute it and/or 0015 * modify it under the terms of the GNU Lesser General Public License 0016 * as published by the Free Software Foundation; either version 2.1 0017 * of the License, or (at your option) any later version. 0018 * 0019 * This program is distributed in the hope that it will be useful, 0020 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0021 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0022 * GNU General Public License for more details. 0023 * 0024 */ 0025 0026 #ifndef __DEMUX_H 0027 #define __DEMUX_H 0028 0029 #include <linux/types.h> 0030 #include <linux/errno.h> 0031 #include <linux/list.h> 0032 #include <linux/time.h> 0033 #include <linux/dvb/dmx.h> 0034 0035 /* 0036 * Common definitions 0037 */ 0038 0039 /* 0040 * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter. 0041 */ 0042 0043 #ifndef DMX_MAX_FILTER_SIZE 0044 #define DMX_MAX_FILTER_SIZE 18 0045 #endif 0046 0047 /* 0048 * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed 0049 * filter. 0050 */ 0051 0052 #ifndef DMX_MAX_SECTION_SIZE 0053 #define DMX_MAX_SECTION_SIZE 4096 0054 #endif 0055 #ifndef DMX_MAX_SECFEED_SIZE 0056 #define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE + 188) 0057 #endif 0058 0059 /* 0060 * TS packet reception 0061 */ 0062 0063 /** 0064 * enum ts_filter_type - filter type bitmap for dmx_ts_feed.set\(\) 0065 * 0066 * @TS_PACKET: Send TS packets (188 bytes) to callback (default). 0067 * @TS_PAYLOAD_ONLY: In case TS_PACKET is set, only send the TS payload 0068 * (<=184 bytes per packet) to callback 0069 * @TS_DECODER: Send stream to built-in decoder (if present). 0070 * @TS_DEMUX: In case TS_PACKET is set, send the TS to the demux 0071 * device, not to the dvr device 0072 */ 0073 enum ts_filter_type { 0074 TS_PACKET = 1, 0075 TS_PAYLOAD_ONLY = 2, 0076 TS_DECODER = 4, 0077 TS_DEMUX = 8, 0078 }; 0079 0080 /** 0081 * struct dmx_ts_feed - Structure that contains a TS feed filter 0082 * 0083 * @is_filtering: Set to non-zero when filtering in progress 0084 * @parent: pointer to struct dmx_demux 0085 * @priv: pointer to private data of the API client 0086 * @set: sets the TS filter 0087 * @start_filtering: starts TS filtering 0088 * @stop_filtering: stops TS filtering 0089 * 0090 * A TS feed is typically mapped to a hardware PID filter on the demux chip. 0091 * Using this API, the client can set the filtering properties to start/stop 0092 * filtering TS packets on a particular TS feed. 0093 */ 0094 struct dmx_ts_feed { 0095 int is_filtering; 0096 struct dmx_demux *parent; 0097 void *priv; 0098 int (*set)(struct dmx_ts_feed *feed, 0099 u16 pid, 0100 int type, 0101 enum dmx_ts_pes pes_type, 0102 ktime_t timeout); 0103 int (*start_filtering)(struct dmx_ts_feed *feed); 0104 int (*stop_filtering)(struct dmx_ts_feed *feed); 0105 }; 0106 0107 /* 0108 * Section reception 0109 */ 0110 0111 /** 0112 * struct dmx_section_filter - Structure that describes a section filter 0113 * 0114 * @filter_value: Contains up to 16 bytes (128 bits) of the TS section header 0115 * that will be matched by the section filter 0116 * @filter_mask: Contains a 16 bytes (128 bits) filter mask with the bits 0117 * specified by @filter_value that will be used on the filter 0118 * match logic. 0119 * @filter_mode: Contains a 16 bytes (128 bits) filter mode. 0120 * @parent: Back-pointer to struct dmx_section_feed. 0121 * @priv: Pointer to private data of the API client. 0122 * 0123 * 0124 * The @filter_mask controls which bits of @filter_value are compared with 0125 * the section headers/payload. On a binary value of 1 in filter_mask, the 0126 * corresponding bits are compared. The filter only accepts sections that are 0127 * equal to filter_value in all the tested bit positions. 0128 */ 0129 struct dmx_section_filter { 0130 u8 filter_value[DMX_MAX_FILTER_SIZE]; 0131 u8 filter_mask[DMX_MAX_FILTER_SIZE]; 0132 u8 filter_mode[DMX_MAX_FILTER_SIZE]; 0133 struct dmx_section_feed *parent; 0134 0135 void *priv; 0136 }; 0137 0138 /** 0139 * struct dmx_section_feed - Structure that contains a section feed filter 0140 * 0141 * @is_filtering: Set to non-zero when filtering in progress 0142 * @parent: pointer to struct dmx_demux 0143 * @priv: pointer to private data of the API client 0144 * @check_crc: If non-zero, check the CRC values of filtered sections. 0145 * @set: sets the section filter 0146 * @allocate_filter: This function is used to allocate a section filter on 0147 * the demux. It should only be called when no filtering 0148 * is in progress on this section feed. If a filter cannot 0149 * be allocated, the function fails with -ENOSPC. 0150 * @release_filter: This function releases all the resources of a 0151 * previously allocated section filter. The function 0152 * should not be called while filtering is in progress 0153 * on this section feed. After calling this function, 0154 * the caller should not try to dereference the filter 0155 * pointer. 0156 * @start_filtering: starts section filtering 0157 * @stop_filtering: stops section filtering 0158 * 0159 * A TS feed is typically mapped to a hardware PID filter on the demux chip. 0160 * Using this API, the client can set the filtering properties to start/stop 0161 * filtering TS packets on a particular TS feed. 0162 */ 0163 struct dmx_section_feed { 0164 int is_filtering; 0165 struct dmx_demux *parent; 0166 void *priv; 0167 0168 int check_crc; 0169 0170 /* private: Used internally at dvb_demux.c */ 0171 u32 crc_val; 0172 0173 u8 *secbuf; 0174 u8 secbuf_base[DMX_MAX_SECFEED_SIZE]; 0175 u16 secbufp, seclen, tsfeedp; 0176 0177 /* public: */ 0178 int (*set)(struct dmx_section_feed *feed, 0179 u16 pid, 0180 int check_crc); 0181 int (*allocate_filter)(struct dmx_section_feed *feed, 0182 struct dmx_section_filter **filter); 0183 int (*release_filter)(struct dmx_section_feed *feed, 0184 struct dmx_section_filter *filter); 0185 int (*start_filtering)(struct dmx_section_feed *feed); 0186 int (*stop_filtering)(struct dmx_section_feed *feed); 0187 }; 0188 0189 /** 0190 * typedef dmx_ts_cb - DVB demux TS filter callback function prototype 0191 * 0192 * @buffer1: Pointer to the start of the filtered TS packets. 0193 * @buffer1_length: Length of the TS data in buffer1. 0194 * @buffer2: Pointer to the tail of the filtered TS packets, or NULL. 0195 * @buffer2_length: Length of the TS data in buffer2. 0196 * @source: Indicates which TS feed is the source of the callback. 0197 * @buffer_flags: Address where buffer flags are stored. Those are 0198 * used to report discontinuity users via DVB 0199 * memory mapped API, as defined by 0200 * &enum dmx_buffer_flags. 0201 * 0202 * This function callback prototype, provided by the client of the demux API, 0203 * is called from the demux code. The function is only called when filtering 0204 * on a TS feed has been enabled using the start_filtering\(\) function at 0205 * the &dmx_demux. 0206 * Any TS packets that match the filter settings are copied to a circular 0207 * buffer. The filtered TS packets are delivered to the client using this 0208 * callback function. 0209 * It is expected that the @buffer1 and @buffer2 callback parameters point to 0210 * addresses within the circular buffer, but other implementations are also 0211 * possible. Note that the called party should not try to free the memory 0212 * the @buffer1 and @buffer2 parameters point to. 0213 * 0214 * When this function is called, the @buffer1 parameter typically points to 0215 * the start of the first undelivered TS packet within a circular buffer. 0216 * The @buffer2 buffer parameter is normally NULL, except when the received 0217 * TS packets have crossed the last address of the circular buffer and 0218 * "wrapped" to the beginning of the buffer. In the latter case the @buffer1 0219 * parameter would contain an address within the circular buffer, while the 0220 * @buffer2 parameter would contain the first address of the circular buffer. 0221 * The number of bytes delivered with this function (i.e. @buffer1_length + 0222 * @buffer2_length) is usually equal to the value of callback_length parameter 0223 * given in the set() function, with one exception: if a timeout occurs before 0224 * receiving callback_length bytes of TS data, any undelivered packets are 0225 * immediately delivered to the client by calling this function. The timeout 0226 * duration is controlled by the set() function in the TS Feed API. 0227 * 0228 * If a TS packet is received with errors that could not be fixed by the 0229 * TS-level forward error correction (FEC), the Transport_error_indicator 0230 * flag of the TS packet header should be set. The TS packet should not be 0231 * discarded, as the error can possibly be corrected by a higher layer 0232 * protocol. If the called party is slow in processing the callback, it 0233 * is possible that the circular buffer eventually fills up. If this happens, 0234 * the demux driver should discard any TS packets received while the buffer 0235 * is full and return -EOVERFLOW. 0236 * 0237 * The type of data returned to the callback can be selected by the 0238 * &dmx_ts_feed.@set function. The type parameter decides if the raw 0239 * TS packet (TS_PACKET) or just the payload (TS_PACKET|TS_PAYLOAD_ONLY) 0240 * should be returned. If additionally the TS_DECODER bit is set the stream 0241 * will also be sent to the hardware MPEG decoder. 0242 * 0243 * Return: 0244 * 0245 * - 0, on success; 0246 * 0247 * - -EOVERFLOW, on buffer overflow. 0248 */ 0249 typedef int (*dmx_ts_cb)(const u8 *buffer1, 0250 size_t buffer1_length, 0251 const u8 *buffer2, 0252 size_t buffer2_length, 0253 struct dmx_ts_feed *source, 0254 u32 *buffer_flags); 0255 0256 /** 0257 * typedef dmx_section_cb - DVB demux TS filter callback function prototype 0258 * 0259 * @buffer1: Pointer to the start of the filtered section, e.g. 0260 * within the circular buffer of the demux driver. 0261 * @buffer1_len: Length of the filtered section data in @buffer1, 0262 * including headers and CRC. 0263 * @buffer2: Pointer to the tail of the filtered section data, 0264 * or NULL. Useful to handle the wrapping of a 0265 * circular buffer. 0266 * @buffer2_len: Length of the filtered section data in @buffer2, 0267 * including headers and CRC. 0268 * @source: Indicates which section feed is the source of the 0269 * callback. 0270 * @buffer_flags: Address where buffer flags are stored. Those are 0271 * used to report discontinuity users via DVB 0272 * memory mapped API, as defined by 0273 * &enum dmx_buffer_flags. 0274 * 0275 * This function callback prototype, provided by the client of the demux API, 0276 * is called from the demux code. The function is only called when 0277 * filtering of sections has been enabled using the function 0278 * &dmx_ts_feed.@start_filtering. When the demux driver has received a 0279 * complete section that matches at least one section filter, the client 0280 * is notified via this callback function. Normally this function is called 0281 * for each received section; however, it is also possible to deliver 0282 * multiple sections with one callback, for example when the system load 0283 * is high. If an error occurs while receiving a section, this 0284 * function should be called with the corresponding error type set in the 0285 * success field, whether or not there is data to deliver. The Section Feed 0286 * implementation should maintain a circular buffer for received sections. 0287 * However, this is not necessary if the Section Feed API is implemented as 0288 * a client of the TS Feed API, because the TS Feed implementation then 0289 * buffers the received data. The size of the circular buffer can be 0290 * configured using the &dmx_ts_feed.@set function in the Section Feed API. 0291 * If there is no room in the circular buffer when a new section is received, 0292 * the section must be discarded. If this happens, the value of the success 0293 * parameter should be DMX_OVERRUN_ERROR on the next callback. 0294 */ 0295 typedef int (*dmx_section_cb)(const u8 *buffer1, 0296 size_t buffer1_len, 0297 const u8 *buffer2, 0298 size_t buffer2_len, 0299 struct dmx_section_filter *source, 0300 u32 *buffer_flags); 0301 0302 /* 0303 * DVB Front-End 0304 */ 0305 0306 /** 0307 * enum dmx_frontend_source - Used to identify the type of frontend 0308 * 0309 * @DMX_MEMORY_FE: The source of the demux is memory. It means that 0310 * the MPEG-TS to be filtered comes from userspace, 0311 * via write() syscall. 0312 * 0313 * @DMX_FRONTEND_0: The source of the demux is a frontend connected 0314 * to the demux. 0315 */ 0316 enum dmx_frontend_source { 0317 DMX_MEMORY_FE, 0318 DMX_FRONTEND_0, 0319 }; 0320 0321 /** 0322 * struct dmx_frontend - Structure that lists the frontends associated with 0323 * a demux 0324 * 0325 * @connectivity_list: List of front-ends that can be connected to a 0326 * particular demux; 0327 * @source: Type of the frontend. 0328 * 0329 * FIXME: this structure should likely be replaced soon by some 0330 * media-controller based logic. 0331 */ 0332 struct dmx_frontend { 0333 struct list_head connectivity_list; 0334 enum dmx_frontend_source source; 0335 }; 0336 0337 /* 0338 * MPEG-2 TS Demux 0339 */ 0340 0341 /** 0342 * enum dmx_demux_caps - MPEG-2 TS Demux capabilities bitmap 0343 * 0344 * @DMX_TS_FILTERING: set if TS filtering is supported; 0345 * @DMX_SECTION_FILTERING: set if section filtering is supported; 0346 * @DMX_MEMORY_BASED_FILTERING: set if write() available. 0347 * 0348 * Those flags are OR'ed in the &dmx_demux.capabilities field 0349 */ 0350 enum dmx_demux_caps { 0351 DMX_TS_FILTERING = 1, 0352 DMX_SECTION_FILTERING = 4, 0353 DMX_MEMORY_BASED_FILTERING = 8, 0354 }; 0355 0356 /* 0357 * Demux resource type identifier. 0358 */ 0359 0360 /** 0361 * DMX_FE_ENTRY - Casts elements in the list of registered 0362 * front-ends from the generic type struct list_head 0363 * to the type * struct dmx_frontend 0364 * 0365 * @list: list of struct dmx_frontend 0366 */ 0367 #define DMX_FE_ENTRY(list) \ 0368 list_entry(list, struct dmx_frontend, connectivity_list) 0369 0370 /** 0371 * struct dmx_demux - Structure that contains the demux capabilities and 0372 * callbacks. 0373 * 0374 * @capabilities: Bitfield of capability flags. 0375 * 0376 * @frontend: Front-end connected to the demux 0377 * 0378 * @priv: Pointer to private data of the API client 0379 * 0380 * @open: This function reserves the demux for use by the caller and, if 0381 * necessary, initializes the demux. When the demux is no longer needed, 0382 * the function @close should be called. It should be possible for 0383 * multiple clients to access the demux at the same time. Thus, the 0384 * function implementation should increment the demux usage count when 0385 * @open is called and decrement it when @close is called. 0386 * The @demux function parameter contains a pointer to the demux API and 0387 * instance data. 0388 * It returns: 0389 * 0 on success; 0390 * -EUSERS, if maximum usage count was reached; 0391 * -EINVAL, on bad parameter. 0392 * 0393 * @close: This function reserves the demux for use by the caller and, if 0394 * necessary, initializes the demux. When the demux is no longer needed, 0395 * the function @close should be called. It should be possible for 0396 * multiple clients to access the demux at the same time. Thus, the 0397 * function implementation should increment the demux usage count when 0398 * @open is called and decrement it when @close is called. 0399 * The @demux function parameter contains a pointer to the demux API and 0400 * instance data. 0401 * It returns: 0402 * 0 on success; 0403 * -ENODEV, if demux was not in use (e. g. no users); 0404 * -EINVAL, on bad parameter. 0405 * 0406 * @write: This function provides the demux driver with a memory buffer 0407 * containing TS packets. Instead of receiving TS packets from the DVB 0408 * front-end, the demux driver software will read packets from memory. 0409 * Any clients of this demux with active TS, PES or Section filters will 0410 * receive filtered data via the Demux callback API (see 0). The function 0411 * returns when all the data in the buffer has been consumed by the demux. 0412 * Demux hardware typically cannot read TS from memory. If this is the 0413 * case, memory-based filtering has to be implemented entirely in software. 0414 * The @demux function parameter contains a pointer to the demux API and 0415 * instance data. 0416 * The @buf function parameter contains a pointer to the TS data in 0417 * kernel-space memory. 0418 * The @count function parameter contains the length of the TS data. 0419 * It returns: 0420 * 0 on success; 0421 * -ERESTARTSYS, if mutex lock was interrupted; 0422 * -EINTR, if a signal handling is pending; 0423 * -ENODEV, if demux was removed; 0424 * -EINVAL, on bad parameter. 0425 * 0426 * @allocate_ts_feed: Allocates a new TS feed, which is used to filter the TS 0427 * packets carrying a certain PID. The TS feed normally corresponds to a 0428 * hardware PID filter on the demux chip. 0429 * The @demux function parameter contains a pointer to the demux API and 0430 * instance data. 0431 * The @feed function parameter contains a pointer to the TS feed API and 0432 * instance data. 0433 * The @callback function parameter contains a pointer to the callback 0434 * function for passing received TS packet. 0435 * It returns: 0436 * 0 on success; 0437 * -ERESTARTSYS, if mutex lock was interrupted; 0438 * -EBUSY, if no more TS feeds is available; 0439 * -EINVAL, on bad parameter. 0440 * 0441 * @release_ts_feed: Releases the resources allocated with @allocate_ts_feed. 0442 * Any filtering in progress on the TS feed should be stopped before 0443 * calling this function. 0444 * The @demux function parameter contains a pointer to the demux API and 0445 * instance data. 0446 * The @feed function parameter contains a pointer to the TS feed API and 0447 * instance data. 0448 * It returns: 0449 * 0 on success; 0450 * -EINVAL on bad parameter. 0451 * 0452 * @allocate_section_feed: Allocates a new section feed, i.e. a demux resource 0453 * for filtering and receiving sections. On platforms with hardware 0454 * support for section filtering, a section feed is directly mapped to 0455 * the demux HW. On other platforms, TS packets are first PID filtered in 0456 * hardware and a hardware section filter then emulated in software. The 0457 * caller obtains an API pointer of type dmx_section_feed_t as an out 0458 * parameter. Using this API the caller can set filtering parameters and 0459 * start receiving sections. 0460 * The @demux function parameter contains a pointer to the demux API and 0461 * instance data. 0462 * The @feed function parameter contains a pointer to the TS feed API and 0463 * instance data. 0464 * The @callback function parameter contains a pointer to the callback 0465 * function for passing received TS packet. 0466 * It returns: 0467 * 0 on success; 0468 * -EBUSY, if no more TS feeds is available; 0469 * -EINVAL, on bad parameter. 0470 * 0471 * @release_section_feed: Releases the resources allocated with 0472 * @allocate_section_feed, including allocated filters. Any filtering in 0473 * progress on the section feed should be stopped before calling this 0474 * function. 0475 * The @demux function parameter contains a pointer to the demux API and 0476 * instance data. 0477 * The @feed function parameter contains a pointer to the TS feed API and 0478 * instance data. 0479 * It returns: 0480 * 0 on success; 0481 * -EINVAL, on bad parameter. 0482 * 0483 * @add_frontend: Registers a connectivity between a demux and a front-end, 0484 * i.e., indicates that the demux can be connected via a call to 0485 * @connect_frontend to use the given front-end as a TS source. The 0486 * client of this function has to allocate dynamic or static memory for 0487 * the frontend structure and initialize its fields before calling this 0488 * function. This function is normally called during the driver 0489 * initialization. The caller must not free the memory of the frontend 0490 * struct before successfully calling @remove_frontend. 0491 * The @demux function parameter contains a pointer to the demux API and 0492 * instance data. 0493 * The @frontend function parameter contains a pointer to the front-end 0494 * instance data. 0495 * It returns: 0496 * 0 on success; 0497 * -EINVAL, on bad parameter. 0498 * 0499 * @remove_frontend: Indicates that the given front-end, registered by a call 0500 * to @add_frontend, can no longer be connected as a TS source by this 0501 * demux. The function should be called when a front-end driver or a demux 0502 * driver is removed from the system. If the front-end is in use, the 0503 * function fails with the return value of -EBUSY. After successfully 0504 * calling this function, the caller can free the memory of the frontend 0505 * struct if it was dynamically allocated before the @add_frontend 0506 * operation. 0507 * The @demux function parameter contains a pointer to the demux API and 0508 * instance data. 0509 * The @frontend function parameter contains a pointer to the front-end 0510 * instance data. 0511 * It returns: 0512 * 0 on success; 0513 * -ENODEV, if the front-end was not found, 0514 * -EINVAL, on bad parameter. 0515 * 0516 * @get_frontends: Provides the APIs of the front-ends that have been 0517 * registered for this demux. Any of the front-ends obtained with this 0518 * call can be used as a parameter for @connect_frontend. The include 0519 * file demux.h contains the macro DMX_FE_ENTRY() for converting an 0520 * element of the generic type struct &list_head * to the type 0521 * struct &dmx_frontend *. The caller must not free the memory of any of 0522 * the elements obtained via this function call. 0523 * The @demux function parameter contains a pointer to the demux API and 0524 * instance data. 0525 * It returns a struct list_head pointer to the list of front-end 0526 * interfaces, or NULL in the case of an empty list. 0527 * 0528 * @connect_frontend: Connects the TS output of the front-end to the input of 0529 * the demux. A demux can only be connected to a front-end registered to 0530 * the demux with the function @add_frontend. It may or may not be 0531 * possible to connect multiple demuxes to the same front-end, depending 0532 * on the capabilities of the HW platform. When not used, the front-end 0533 * should be released by calling @disconnect_frontend. 0534 * The @demux function parameter contains a pointer to the demux API and 0535 * instance data. 0536 * The @frontend function parameter contains a pointer to the front-end 0537 * instance data. 0538 * It returns: 0539 * 0 on success; 0540 * -EINVAL, on bad parameter. 0541 * 0542 * @disconnect_frontend: Disconnects the demux and a front-end previously 0543 * connected by a @connect_frontend call. 0544 * The @demux function parameter contains a pointer to the demux API and 0545 * instance data. 0546 * It returns: 0547 * 0 on success; 0548 * -EINVAL on bad parameter. 0549 * 0550 * @get_pes_pids: Get the PIDs for DMX_PES_AUDIO0, DMX_PES_VIDEO0, 0551 * DMX_PES_TELETEXT0, DMX_PES_SUBTITLE0 and DMX_PES_PCR0. 0552 * The @demux function parameter contains a pointer to the demux API and 0553 * instance data. 0554 * The @pids function parameter contains an array with five u16 elements 0555 * where the PIDs will be stored. 0556 * It returns: 0557 * 0 on success; 0558 * -EINVAL on bad parameter. 0559 */ 0560 struct dmx_demux { 0561 enum dmx_demux_caps capabilities; 0562 struct dmx_frontend *frontend; 0563 void *priv; 0564 int (*open)(struct dmx_demux *demux); 0565 int (*close)(struct dmx_demux *demux); 0566 int (*write)(struct dmx_demux *demux, const char __user *buf, 0567 size_t count); 0568 int (*allocate_ts_feed)(struct dmx_demux *demux, 0569 struct dmx_ts_feed **feed, 0570 dmx_ts_cb callback); 0571 int (*release_ts_feed)(struct dmx_demux *demux, 0572 struct dmx_ts_feed *feed); 0573 int (*allocate_section_feed)(struct dmx_demux *demux, 0574 struct dmx_section_feed **feed, 0575 dmx_section_cb callback); 0576 int (*release_section_feed)(struct dmx_demux *demux, 0577 struct dmx_section_feed *feed); 0578 int (*add_frontend)(struct dmx_demux *demux, 0579 struct dmx_frontend *frontend); 0580 int (*remove_frontend)(struct dmx_demux *demux, 0581 struct dmx_frontend *frontend); 0582 struct list_head *(*get_frontends)(struct dmx_demux *demux); 0583 int (*connect_frontend)(struct dmx_demux *demux, 0584 struct dmx_frontend *frontend); 0585 int (*disconnect_frontend)(struct dmx_demux *demux); 0586 0587 int (*get_pes_pids)(struct dmx_demux *demux, u16 *pids); 0588 0589 /* private: */ 0590 0591 /* 0592 * Only used at av7110, to read some data from firmware. 0593 * As this was never documented, we have no clue about what's 0594 * there, and its usage on other drivers aren't encouraged. 0595 */ 0596 int (*get_stc)(struct dmx_demux *demux, unsigned int num, 0597 u64 *stc, unsigned int *base); 0598 }; 0599 0600 #endif /* #ifndef __DEMUX_H */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |
![]() ![]() |