• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/media/dvb/dvb-core/

Lines Matching refs:dmxdevfilter

292 					       *dmxdevfilter, int state)
294 spin_lock_irq(&dmxdevfilter->dev->lock);
295 dmxdevfilter->state = state;
296 spin_unlock_irq(&dmxdevfilter->dev->lock);
299 static int dvb_dmxdev_set_buffer_size(struct dmxdev_filter *dmxdevfilter,
302 struct dvb_ringbuffer *buf = &dmxdevfilter->buffer;
310 if (dmxdevfilter->state >= DMXDEV_STATE_GO)
319 spin_lock_irq(&dmxdevfilter->dev->lock);
325 spin_unlock_irq(&dmxdevfilter->dev->lock);
334 struct dmxdev_filter *dmxdevfilter = (struct dmxdev_filter *)data;
336 dmxdevfilter->buffer.error = -ETIMEDOUT;
337 spin_lock_irq(&dmxdevfilter->dev->lock);
338 dmxdevfilter->state = DMXDEV_STATE_TIMEDOUT;
339 spin_unlock_irq(&dmxdevfilter->dev->lock);
340 wake_up(&dmxdevfilter->buffer.queue);
343 static void dvb_dmxdev_filter_timer(struct dmxdev_filter *dmxdevfilter)
345 struct dmx_sct_filter_params *para = &dmxdevfilter->params.sec;
347 del_timer(&dmxdevfilter->timer);
349 dmxdevfilter->timer.function = dvb_dmxdev_filter_timeout;
350 dmxdevfilter->timer.data = (unsigned long)dmxdevfilter;
351 dmxdevfilter->timer.expires =
353 add_timer(&dmxdevfilter->timer);
362 struct dmxdev_filter *dmxdevfilter = filter->priv;
365 if (dmxdevfilter->buffer.error) {
366 wake_up(&dmxdevfilter->buffer.queue);
369 spin_lock(&dmxdevfilter->dev->lock);
370 if (dmxdevfilter->state != DMXDEV_STATE_GO) {
371 spin_unlock(&dmxdevfilter->dev->lock);
374 del_timer(&dmxdevfilter->timer);
378 ret = dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer1,
381 ret = dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer2,
385 dvb_ringbuffer_flush(&dmxdevfilter->buffer);
386 dmxdevfilter->buffer.error = ret;
388 if (dmxdevfilter->params.sec.flags & DMX_ONESHOT)
389 dmxdevfilter->state = DMXDEV_STATE_DONE;
390 spin_unlock(&dmxdevfilter->dev->lock);
391 wake_up(&dmxdevfilter->buffer.queue);
400 struct dmxdev_filter *dmxdevfilter = feed->priv;
404 spin_lock(&dmxdevfilter->dev->lock);
405 if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER) {
406 spin_unlock(&dmxdevfilter->dev->lock);
410 if (dmxdevfilter->params.pes.output == DMX_OUT_TAP
411 || dmxdevfilter->params.pes.output == DMX_OUT_TSDEMUX_TAP)
412 buffer = &dmxdevfilter->buffer;
414 buffer = &dmxdevfilter->dev->dvr_buffer;
416 spin_unlock(&dmxdevfilter->dev->lock);
427 spin_unlock(&dmxdevfilter->dev->lock);
433 static int dvb_dmxdev_feed_stop(struct dmxdev_filter *dmxdevfilter)
437 dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
439 switch (dmxdevfilter->type) {
441 del_timer(&dmxdevfilter->timer);
442 dmxdevfilter->feed.sec->stop_filtering(dmxdevfilter->feed.sec);
445 list_for_each_entry(feed, &dmxdevfilter->feed.ts, next)
503 static int dvb_dmxdev_filter_stop(struct dmxdev_filter *dmxdevfilter)
508 if (dmxdevfilter->state < DMXDEV_STATE_GO)
511 switch (dmxdevfilter->type) {
513 if (!dmxdevfilter->feed.sec)
515 dvb_dmxdev_feed_stop(dmxdevfilter);
516 if (dmxdevfilter->filter.sec)
517 dmxdevfilter->feed.sec->
518 release_filter(dmxdevfilter->feed.sec,
519 dmxdevfilter->filter.sec);
520 dvb_dmxdev_feed_restart(dmxdevfilter);
521 dmxdevfilter->feed.sec = NULL;
524 dvb_dmxdev_feed_stop(dmxdevfilter);
525 demux = dmxdevfilter->dev->demux;
526 list_for_each_entry(feed, &dmxdevfilter->feed.ts, next) {
532 if (dmxdevfilter->state == DMXDEV_STATE_ALLOCATED)
537 dvb_ringbuffer_flush(&dmxdevfilter->buffer);
541 static void dvb_dmxdev_delete_pids(struct dmxdev_filter *dmxdevfilter)
546 list_for_each_entry_safe(feed, tmp, &dmxdevfilter->feed.ts, next) {
551 BUG_ON(!list_empty(&dmxdevfilter->feed.ts));
554 static inline int dvb_dmxdev_filter_reset(struct dmxdev_filter *dmxdevfilter)
556 if (dmxdevfilter->state < DMXDEV_STATE_SET)
559 if (dmxdevfilter->type == DMXDEV_TYPE_PES)
560 dvb_dmxdev_delete_pids(dmxdevfilter);
562 dmxdevfilter->type = DMXDEV_TYPE_NONE;
563 dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED);
741 struct dmxdev_filter *dmxdevfilter;
758 dmxdevfilter = &dmxdev->filter[i];
759 mutex_init(&dmxdevfilter->mutex);
760 file->private_data = dmxdevfilter;
762 dvb_ringbuffer_init(&dmxdevfilter->buffer, NULL, 8192);
763 dmxdevfilter->type = DMXDEV_TYPE_NONE;
764 dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED);
765 init_timer(&dmxdevfilter->timer);
774 struct dmxdev_filter *dmxdevfilter)
777 mutex_lock(&dmxdevfilter->mutex);
779 dvb_dmxdev_filter_stop(dmxdevfilter);
780 dvb_dmxdev_filter_reset(dmxdevfilter);
782 if (dmxdevfilter->buffer.data) {
783 void *mem = dmxdevfilter->buffer.data;
786 dmxdevfilter->buffer.data = NULL;
791 dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_FREE);
792 wake_up(&dmxdevfilter->buffer.queue);
793 mutex_unlock(&dmxdevfilter->mutex);
856 struct dmxdev_filter *dmxdevfilter,
861 dvb_dmxdev_filter_stop(dmxdevfilter);
863 dmxdevfilter->type = DMXDEV_TYPE_SEC;
864 memcpy(&dmxdevfilter->params.sec,
866 invert_mode(&dmxdevfilter->params.sec.filter);
867 dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
870 return dvb_dmxdev_filter_start(dmxdevfilter);
876 struct dmxdev_filter *dmxdevfilter,
881 dvb_dmxdev_filter_stop(dmxdevfilter);
882 dvb_dmxdev_filter_reset(dmxdevfilter);
887 dmxdevfilter->type = DMXDEV_TYPE_PES;
888 memcpy(&dmxdevfilter->params, params,
890 INIT_LIST_HEAD(&dmxdevfilter->feed.ts);
892 dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
894 ret = dvb_dmxdev_add_pid(dmxdev, dmxdevfilter,
895 dmxdevfilter->params.pes.pid);
900 return dvb_dmxdev_filter_start(dmxdevfilter);
950 struct dmxdev_filter *dmxdevfilter = file->private_data;
953 if (mutex_lock_interruptible(&dmxdevfilter->mutex))
956 if (dmxdevfilter->type == DMXDEV_TYPE_SEC)
957 ret = dvb_dmxdev_read_sec(dmxdevfilter, file, buf, count, ppos);
959 ret = dvb_dmxdev_buffer_read(&dmxdevfilter->buffer,
963 mutex_unlock(&dmxdevfilter->mutex);
970 struct dmxdev_filter *dmxdevfilter = file->private_data;
971 struct dmxdev *dmxdev = dmxdevfilter->dev;
980 if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
984 if (dmxdevfilter->state < DMXDEV_STATE_SET)
987 ret = dvb_dmxdev_filter_start(dmxdevfilter);
988 mutex_unlock(&dmxdevfilter->mutex);
992 if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
996 ret = dvb_dmxdev_filter_stop(dmxdevfilter);
997 mutex_unlock(&dmxdevfilter->mutex);
1001 if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
1005 ret = dvb_dmxdev_filter_set(dmxdev, dmxdevfilter, parg);
1006 mutex_unlock(&dmxdevfilter->mutex);
1010 if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
1014 ret = dvb_dmxdev_pes_filter_set(dmxdev, dmxdevfilter, parg);
1015 mutex_unlock(&dmxdevfilter->mutex);
1019 if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
1023 ret = dvb_dmxdev_set_buffer_size(dmxdevfilter, arg);
1024 mutex_unlock(&dmxdevfilter->mutex);
1063 if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
1067 ret = dvb_dmxdev_add_pid(dmxdev, dmxdevfilter, *(u16 *)parg);
1068 mutex_unlock(&dmxdevfilter->mutex);
1072 if (mutex_lock_interruptible(&dmxdevfilter->mutex)) {
1076 ret = dvb_dmxdev_remove_pid(dmxdev, dmxdevfilter, *(u16 *)parg);
1077 mutex_unlock(&dmxdevfilter->mutex);
1102 struct dmxdev_filter *dmxdevfilter = file->private_data;
1105 if (!dmxdevfilter)
1108 poll_wait(file, &dmxdevfilter->buffer.queue, wait);
1110 if (dmxdevfilter->state != DMXDEV_STATE_GO &&
1111 dmxdevfilter->state != DMXDEV_STATE_DONE &&
1112 dmxdevfilter->state != DMXDEV_STATE_TIMEDOUT)
1115 if (dmxdevfilter->buffer.error)
1118 if (!dvb_ringbuffer_empty(&dmxdevfilter->buffer))
1126 struct dmxdev_filter *dmxdevfilter = file->private_data;
1127 struct dmxdev *dmxdev = dmxdevfilter->dev;
1131 ret = dvb_dmxdev_filter_free(dmxdev, dmxdevfilter);