• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/media/dvb/dvb-core/

Lines Matching defs:dmxdev

2  * dmxdev.c - DVB demultiplexer device
33 #include "dmxdev.h"
54 dprintk("dmxdev: buffer overflow\n");
127 struct dmxdev *dmxdev = dvbdev->priv;
132 if (mutex_lock_interruptible(&dmxdev->mutex))
135 if (dmxdev->exit) {
136 mutex_unlock(&dmxdev->mutex);
141 if (!(dmxdev->capabilities & DMXDEV_CAP_DUPLEX)) {
142 mutex_unlock(&dmxdev->mutex);
150 mutex_unlock(&dmxdev->mutex);
155 mutex_unlock(&dmxdev->mutex);
158 dvb_ringbuffer_init(&dmxdev->dvr_buffer, mem, DVR_BUFFER_SIZE);
163 dmxdev->dvr_orig_fe = dmxdev->demux->frontend;
165 if (!dmxdev->demux->write) {
166 mutex_unlock(&dmxdev->mutex);
170 front = get_fe(dmxdev->demux, DMX_MEMORY_FE);
173 mutex_unlock(&dmxdev->mutex);
176 dmxdev->demux->disconnect_frontend(dmxdev->demux);
177 dmxdev->demux->connect_frontend(dmxdev->demux, front);
180 mutex_unlock(&dmxdev->mutex);
187 struct dmxdev *dmxdev = dvbdev->priv;
189 mutex_lock(&dmxdev->mutex);
192 dmxdev->demux->disconnect_frontend(dmxdev->demux);
193 dmxdev->demux->connect_frontend(dmxdev->demux,
194 dmxdev->dvr_orig_fe);
198 if (dmxdev->dvr_buffer.data) {
199 void *mem = dmxdev->dvr_buffer.data;
201 spin_lock_irq(&dmxdev->lock);
202 dmxdev->dvr_buffer.data = NULL;
203 spin_unlock_irq(&dmxdev->lock);
209 if(dvbdev->users==-1 && dmxdev->exit==1) {
212 mutex_unlock(&dmxdev->mutex);
215 mutex_unlock(&dmxdev->mutex);
224 struct dmxdev *dmxdev = dvbdev->priv;
227 if (!dmxdev->demux->write)
231 if (mutex_lock_interruptible(&dmxdev->mutex))
234 if (dmxdev->exit) {
235 mutex_unlock(&dmxdev->mutex);
238 ret = dmxdev->demux->write(dmxdev->demux, buf, count);
239 mutex_unlock(&dmxdev->mutex);
247 struct dmxdev *dmxdev = dvbdev->priv;
250 if (dmxdev->exit) {
251 mutex_unlock(&dmxdev->mutex);
255 //mutex_lock(&dmxdev->mutex);
256 ret = dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer,
259 //mutex_unlock(&dmxdev->mutex);
343 dprintk("dmxdev: section callback %02x %02x %02x %02x %02x %02x\n",
440 struct dmxdev *dmxdev = filter->dev;
443 for (i = 0; i < dmxdev->filternum; i++)
444 if (dmxdev->filter[i].state >= DMXDEV_STATE_GO &&
445 dmxdev->filter[i].type == DMXDEV_TYPE_SEC &&
446 dmxdev->filter[i].params.sec.pid == pid) {
447 dvb_dmxdev_feed_start(&dmxdev->filter[i]);
451 filter->dev->demux->release_section_feed(dmxdev->demux,
505 struct dmxdev *dmxdev = filter->dev;
538 for (i = 0; i < dmxdev->filternum; i++) {
539 if (dmxdev->filter[i].state >= DMXDEV_STATE_GO &&
540 dmxdev->filter[i].type == DMXDEV_TYPE_SEC &&
541 dmxdev->filter[i].params.sec.pid == para->pid) {
542 *secfeed = dmxdev->filter[i].feed.sec;
549 ret = dmxdev->demux->allocate_section_feed(dmxdev->demux,
628 ret = dmxdev->demux->allocate_ts_feed(dmxdev->demux,
639 dmxdev->demux->release_ts_feed(dmxdev->demux,
646 dmxdev->demux->release_ts_feed(dmxdev->demux,
664 struct dmxdev *dmxdev = dvbdev->priv;
668 if (!dmxdev->filter)
671 if (mutex_lock_interruptible(&dmxdev->mutex))
674 for (i = 0; i < dmxdev->filternum; i++)
675 if (dmxdev->filter[i].state == DMXDEV_STATE_FREE)
678 if (i == dmxdev->filternum) {
679 mutex_unlock(&dmxdev->mutex);
683 dmxdevfilter = &dmxdev->filter[i];
695 mutex_unlock(&dmxdev->mutex);
699 static int dvb_dmxdev_filter_free(struct dmxdev *dmxdev,
702 mutex_lock(&dmxdev->mutex);
711 spin_lock_irq(&dmxdev->lock);
713 spin_unlock_irq(&dmxdev->lock);
720 mutex_unlock(&dmxdev->mutex);
732 static int dvb_dmxdev_filter_set(struct dmxdev *dmxdev,
752 static int dvb_dmxdev_pes_filter_set(struct dmxdev *dmxdev,
839 struct dmxdev *dmxdev = dmxdevfilter->dev;
843 if (mutex_lock_interruptible(&dmxdev->mutex))
849 mutex_unlock(&dmxdev->mutex);
861 mutex_unlock(&dmxdev->mutex);
870 mutex_unlock(&dmxdev->mutex);
873 ret = dvb_dmxdev_filter_set(dmxdev, dmxdevfilter, parg);
879 mutex_unlock(&dmxdev->mutex);
882 ret = dvb_dmxdev_pes_filter_set(dmxdev, dmxdevfilter, parg);
888 mutex_unlock(&dmxdev->mutex);
896 if (!dmxdev->demux->get_pes_pids) {
900 dmxdev->demux->get_pes_pids(dmxdev->demux, parg);
904 if (!dmxdev->demux->get_caps) {
908 ret = dmxdev->demux->get_caps(dmxdev->demux, parg);
912 if (!dmxdev->demux->set_source) {
916 ret = dmxdev->demux->set_source(dmxdev->demux, parg);
920 if (!dmxdev->demux->get_stc) {
924 ret = dmxdev->demux->get_stc(dmxdev->demux,
934 mutex_unlock(&dmxdev->mutex);
971 struct dmxdev *dmxdev = dmxdevfilter->dev;
975 ret = dvb_dmxdev_filter_free(dmxdev, dmxdevfilter);
977 mutex_lock(&dmxdev->mutex);
978 dmxdev->dvbdev->users--;
979 if(dmxdev->dvbdev->users==1 && dmxdev->exit==1) {
982 mutex_unlock(&dmxdev->mutex);
983 wake_up(&dmxdev->dvbdev->wait_queue);
985 mutex_unlock(&dmxdev->mutex);
1010 struct dmxdev *dmxdev = dvbdev->priv;
1013 if (mutex_lock_interruptible(&dmxdev->mutex))
1025 mutex_unlock(&dmxdev->mutex);
1038 struct dmxdev *dmxdev = dvbdev->priv;
1043 poll_wait(file, &dmxdev->dvr_buffer.queue, wait);
1046 if (dmxdev->dvr_buffer.error)
1049 if (!dvb_ringbuffer_empty(&dmxdev->dvr_buffer))
1074 int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter)
1078 if (dmxdev->demux->open(dmxdev->demux) < 0)
1081 dmxdev->filter = vmalloc(dmxdev->filternum * sizeof(struct dmxdev_filter));
1082 if (!dmxdev->filter)
1085 mutex_init(&dmxdev->mutex);
1086 spin_lock_init(&dmxdev->lock);
1087 for (i = 0; i < dmxdev->filternum; i++) {
1088 dmxdev->filter[i].dev = dmxdev;
1089 dmxdev->filter[i].buffer.data = NULL;
1090 dvb_dmxdev_filter_state_set(&dmxdev->filter[i],
1094 dvb_register_device(dvb_adapter, &dmxdev->dvbdev, &dvbdev_demux, dmxdev,
1096 dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr,
1097 dmxdev, DVB_DEVICE_DVR);
1099 dvb_ringbuffer_init(&dmxdev->dvr_buffer, NULL, 8192);
1106 void dvb_dmxdev_release(struct dmxdev *dmxdev)
1108 dmxdev->exit=1;
1109 if (dmxdev->dvbdev->users > 1) {
1110 wait_event(dmxdev->dvbdev->wait_queue,
1111 dmxdev->dvbdev->users==1);
1113 if (dmxdev->dvr_dvbdev->users > 1) {
1114 wait_event(dmxdev->dvr_dvbdev->wait_queue,
1115 dmxdev->dvr_dvbdev->users==1);
1118 dvb_unregister_device(dmxdev->dvbdev);
1119 dvb_unregister_device(dmxdev->dvr_dvbdev);
1121 vfree(dmxdev->filter);
1122 dmxdev->filter = NULL;
1123 dmxdev->demux->close(dmxdev->demux);