Lines Matching refs:filter

378 				       struct dmx_section_filter *filter,  in dvb_dmxdev_section_callback()  argument
381 struct dmxdev_filter *dmxdevfilter = filter->priv; in dvb_dmxdev_section_callback()
499 static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter) in dvb_dmxdev_feed_start() argument
504 dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO); in dvb_dmxdev_feed_start()
506 switch (filter->type) { in dvb_dmxdev_feed_start()
508 return filter->feed.sec->start_filtering(filter->feed.sec); in dvb_dmxdev_feed_start()
510 list_for_each_entry(feed, &filter->feed.ts, next) { in dvb_dmxdev_feed_start()
513 dvb_dmxdev_feed_stop(filter); in dvb_dmxdev_feed_start()
527 static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter) in dvb_dmxdev_feed_restart() argument
530 struct dmxdev *dmxdev = filter->dev; in dvb_dmxdev_feed_restart()
531 u16 pid = filter->params.sec.pid; in dvb_dmxdev_feed_restart()
534 if (dmxdev->filter[i].state >= DMXDEV_STATE_GO && in dvb_dmxdev_feed_restart()
535 dmxdev->filter[i].type == DMXDEV_TYPE_SEC && in dvb_dmxdev_feed_restart()
536 dmxdev->filter[i].params.sec.pid == pid) { in dvb_dmxdev_feed_restart()
537 dvb_dmxdev_feed_start(&dmxdev->filter[i]); in dvb_dmxdev_feed_restart()
541 filter->dev->demux->release_section_feed(dmxdev->demux, in dvb_dmxdev_feed_restart()
542 filter->feed.sec); in dvb_dmxdev_feed_restart()
560 if (dmxdevfilter->filter.sec) in dvb_dmxdev_filter_stop()
563 dmxdevfilter->filter.sec); in dvb_dmxdev_filter_stop()
612 struct dmxdev_filter *filter, in dvb_dmxdev_start_feed() argument
616 struct dmx_pes_filter_params *para = &filter->params.pes; in dvb_dmxdev_start_feed()
646 tsfeed->priv = filter; in dvb_dmxdev_start_feed()
663 static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter) in dvb_dmxdev_filter_start() argument
665 struct dmxdev *dmxdev = filter->dev; in dvb_dmxdev_filter_start()
670 if (filter->state < DMXDEV_STATE_SET) in dvb_dmxdev_filter_start()
673 if (filter->state >= DMXDEV_STATE_GO) in dvb_dmxdev_filter_start()
674 dvb_dmxdev_filter_stop(filter); in dvb_dmxdev_filter_start()
676 if (!filter->buffer.data) { in dvb_dmxdev_filter_start()
677 mem = vmalloc(filter->buffer.size); in dvb_dmxdev_filter_start()
680 spin_lock_irq(&filter->dev->lock); in dvb_dmxdev_filter_start()
681 filter->buffer.data = mem; in dvb_dmxdev_filter_start()
682 spin_unlock_irq(&filter->dev->lock); in dvb_dmxdev_filter_start()
685 dvb_ringbuffer_flush(&filter->buffer); in dvb_dmxdev_filter_start()
687 switch (filter->type) { in dvb_dmxdev_filter_start()
690 struct dmx_sct_filter_params *para = &filter->params.sec; in dvb_dmxdev_filter_start()
691 struct dmx_section_filter **secfilter = &filter->filter.sec; in dvb_dmxdev_filter_start()
692 struct dmx_section_feed **secfeed = &filter->feed.sec; in dvb_dmxdev_filter_start()
700 if (dmxdev->filter[i].state >= DMXDEV_STATE_GO && in dvb_dmxdev_filter_start()
701 dmxdev->filter[i].type == DMXDEV_TYPE_SEC && in dvb_dmxdev_filter_start()
702 dmxdev->filter[i].params.sec.pid == para->pid) { in dvb_dmxdev_filter_start()
703 *secfeed = dmxdev->filter[i].feed.sec; in dvb_dmxdev_filter_start()
724 dvb_dmxdev_feed_restart(filter); in dvb_dmxdev_filter_start()
728 dvb_dmxdev_feed_stop(filter); in dvb_dmxdev_filter_start()
733 dvb_dmxdev_feed_restart(filter); in dvb_dmxdev_filter_start()
734 filter->feed.sec->start_filtering(*secfeed); in dvb_dmxdev_filter_start()
739 (*secfilter)->priv = filter; in dvb_dmxdev_filter_start()
742 &(para->filter.filter[1]), DMX_FILTER_SIZE - 1); in dvb_dmxdev_filter_start()
744 &para->filter.mask[1], DMX_FILTER_SIZE - 1); in dvb_dmxdev_filter_start()
746 &para->filter.mode[1], DMX_FILTER_SIZE - 1); in dvb_dmxdev_filter_start()
748 (*secfilter)->filter_value[0] = para->filter.filter[0]; in dvb_dmxdev_filter_start()
749 (*secfilter)->filter_mask[0] = para->filter.mask[0]; in dvb_dmxdev_filter_start()
750 (*secfilter)->filter_mode[0] = para->filter.mode[0]; in dvb_dmxdev_filter_start()
754 filter->todo = 0; in dvb_dmxdev_filter_start()
756 ret = filter->feed.sec->start_filtering(filter->feed.sec); in dvb_dmxdev_filter_start()
760 dvb_dmxdev_filter_timer(filter); in dvb_dmxdev_filter_start()
764 list_for_each_entry(feed, &filter->feed.ts, next) { in dvb_dmxdev_filter_start()
765 ret = dvb_dmxdev_start_feed(dmxdev, filter, feed); in dvb_dmxdev_filter_start()
767 dvb_dmxdev_filter_stop(filter); in dvb_dmxdev_filter_start()
776 dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO); in dvb_dmxdev_filter_start()
787 if (!dmxdev->filter) in dvb_demux_open()
799 if (dmxdev->filter[i].state == DMXDEV_STATE_FREE) in dvb_demux_open()
807 dmxdevfilter = &dmxdev->filter[i]; in dvb_demux_open()
859 static inline void invert_mode(struct dmx_filter *filter) in invert_mode() argument
864 filter->mode[i] ^= 0xff; in invert_mode()
868 struct dmxdev_filter *filter, u16 pid) in dvb_dmxdev_add_pid() argument
872 if ((filter->type != DMXDEV_TYPE_PES) || in dvb_dmxdev_add_pid()
873 (filter->state < DMXDEV_STATE_SET)) in dvb_dmxdev_add_pid()
877 if ((filter->params.pes.output != DMX_OUT_TSDEMUX_TAP) && in dvb_dmxdev_add_pid()
878 (!list_empty(&filter->feed.ts))) in dvb_dmxdev_add_pid()
886 list_add(&feed->next, &filter->feed.ts); in dvb_dmxdev_add_pid()
888 if (filter->state >= DMXDEV_STATE_GO) in dvb_dmxdev_add_pid()
889 return dvb_dmxdev_start_feed(dmxdev, filter, feed); in dvb_dmxdev_add_pid()
895 struct dmxdev_filter *filter, u16 pid) in dvb_dmxdev_remove_pid() argument
899 if ((filter->type != DMXDEV_TYPE_PES) || in dvb_dmxdev_remove_pid()
900 (filter->state < DMXDEV_STATE_SET)) in dvb_dmxdev_remove_pid()
903 list_for_each_entry_safe(feed, tmp, &filter->feed.ts, next) { in dvb_dmxdev_remove_pid()
906 filter->dev->demux->release_ts_feed(filter->dev->demux, in dvb_dmxdev_remove_pid()
928 invert_mode(&dmxdevfilter->params.sec.filter); in dvb_dmxdev_filter_set()
1416 dmxdev->filter = vmalloc(array_size(sizeof(struct dmxdev_filter), in dvb_dmxdev_init()
1418 if (!dmxdev->filter) in dvb_dmxdev_init()
1424 dmxdev->filter[i].dev = dmxdev; in dvb_dmxdev_init()
1425 dmxdev->filter[i].buffer.data = NULL; in dvb_dmxdev_init()
1426 dvb_dmxdev_filter_state_set(&dmxdev->filter[i], in dvb_dmxdev_init()
1447 vfree(dmxdev->filter); in dvb_dmxdev_init()
1448 dmxdev->filter = NULL; in dvb_dmxdev_init()
1472 vfree(dmxdev->filter); in dvb_dmxdev_release()
1473 dmxdev->filter = NULL; in dvb_dmxdev_release()