Lines Matching refs:adap
34 static int pvr2_dvb_feed_func(struct pvr2_dvb_adapter *adap) in pvr2_dvb_feed_func() argument
44 stream = adap->channel.stream->stream; in pvr2_dvb_feed_func()
57 &adap->demux, in pvr2_dvb_feed_func()
58 adap->buffer_storage[ in pvr2_dvb_feed_func()
79 adap->buffer_wait_data, in pvr2_dvb_feed_func()
104 static void pvr2_dvb_notify(struct pvr2_dvb_adapter *adap) in pvr2_dvb_notify() argument
106 wake_up(&adap->buffer_wait_data); in pvr2_dvb_notify()
109 static void pvr2_dvb_stream_end(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_end() argument
114 if (adap->thread) { in pvr2_dvb_stream_end()
115 kthread_stop(adap->thread); in pvr2_dvb_stream_end()
116 adap->thread = NULL; in pvr2_dvb_stream_end()
119 if (adap->channel.stream) { in pvr2_dvb_stream_end()
120 stream = adap->channel.stream->stream; in pvr2_dvb_stream_end()
125 pvr2_hdw_set_streaming(adap->channel.hdw, 0); in pvr2_dvb_stream_end()
129 pvr2_channel_claim_stream(&adap->channel, NULL); in pvr2_dvb_stream_end()
132 if (adap->stream_run) { in pvr2_dvb_stream_end()
134 if (!(adap->buffer_storage[idx])) continue; in pvr2_dvb_stream_end()
135 kfree(adap->buffer_storage[idx]); in pvr2_dvb_stream_end()
136 adap->buffer_storage[idx] = NULL; in pvr2_dvb_stream_end()
138 adap->stream_run = 0; in pvr2_dvb_stream_end()
142 static int pvr2_dvb_stream_do_start(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_do_start() argument
144 struct pvr2_context *pvr = adap->channel.mc_head; in pvr2_dvb_stream_do_start()
150 if (adap->stream_run) return -EIO; in pvr2_dvb_stream_do_start()
152 ret = pvr2_channel_claim_stream(&adap->channel, &pvr->video_stream); in pvr2_dvb_stream_do_start()
156 stream = adap->channel.stream->stream; in pvr2_dvb_stream_do_start()
159 adap->buffer_storage[idx] = kmalloc(PVR2_DVB_BUFFER_SIZE, in pvr2_dvb_stream_do_start()
161 if (!(adap->buffer_storage[idx])) return -ENOMEM; in pvr2_dvb_stream_do_start()
165 (pvr2_stream_callback) pvr2_dvb_notify, adap); in pvr2_dvb_stream_do_start()
173 adap->buffer_storage[idx], in pvr2_dvb_stream_do_start()
177 ret = pvr2_hdw_set_streaming(adap->channel.hdw, 1); in pvr2_dvb_stream_do_start()
185 adap->thread = kthread_run(pvr2_dvb_feed_thread, adap, "pvrusb2-dvb"); in pvr2_dvb_stream_do_start()
187 if (IS_ERR(adap->thread)) { in pvr2_dvb_stream_do_start()
188 ret = PTR_ERR(adap->thread); in pvr2_dvb_stream_do_start()
189 adap->thread = NULL; in pvr2_dvb_stream_do_start()
193 adap->stream_run = !0; in pvr2_dvb_stream_do_start()
198 static int pvr2_dvb_stream_start(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_start() argument
200 int ret = pvr2_dvb_stream_do_start(adap); in pvr2_dvb_stream_start()
201 if (ret < 0) pvr2_dvb_stream_end(adap); in pvr2_dvb_stream_start()
207 struct pvr2_dvb_adapter *adap = dvbdmxfeed->demux->priv; in pvr2_dvb_ctrl_feed() local
210 if (adap == NULL) return -ENODEV; in pvr2_dvb_ctrl_feed()
212 mutex_lock(&adap->lock); in pvr2_dvb_ctrl_feed()
215 if (!adap->feedcount) { in pvr2_dvb_ctrl_feed()
218 ret = pvr2_dvb_stream_start(adap); in pvr2_dvb_ctrl_feed()
221 (adap->feedcount)++; in pvr2_dvb_ctrl_feed()
222 } else if (adap->feedcount > 0) { in pvr2_dvb_ctrl_feed()
223 (adap->feedcount)--; in pvr2_dvb_ctrl_feed()
224 if (!adap->feedcount) { in pvr2_dvb_ctrl_feed()
227 pvr2_dvb_stream_end(adap); in pvr2_dvb_ctrl_feed()
231 mutex_unlock(&adap->lock); in pvr2_dvb_ctrl_feed()
250 struct pvr2_dvb_adapter *adap = fe->dvb->priv; in pvr2_dvb_bus_ctrl() local
252 &adap->channel, in pvr2_dvb_bus_ctrl()
256 static int pvr2_dvb_adapter_init(struct pvr2_dvb_adapter *adap) in pvr2_dvb_adapter_init() argument
260 ret = dvb_register_adapter(&adap->dvb_adap, "pvrusb2-dvb", in pvr2_dvb_adapter_init()
262 &adap->channel.hdw->usb_dev->dev, in pvr2_dvb_adapter_init()
269 adap->dvb_adap.priv = adap; in pvr2_dvb_adapter_init()
271 adap->demux.dmx.capabilities = DMX_TS_FILTERING | in pvr2_dvb_adapter_init()
274 adap->demux.priv = adap; in pvr2_dvb_adapter_init()
275 adap->demux.filternum = 256; in pvr2_dvb_adapter_init()
276 adap->demux.feednum = 256; in pvr2_dvb_adapter_init()
277 adap->demux.start_feed = pvr2_dvb_start_feed; in pvr2_dvb_adapter_init()
278 adap->demux.stop_feed = pvr2_dvb_stop_feed; in pvr2_dvb_adapter_init()
279 adap->demux.write_to_decoder = NULL; in pvr2_dvb_adapter_init()
281 ret = dvb_dmx_init(&adap->demux); in pvr2_dvb_adapter_init()
288 adap->dmxdev.filternum = adap->demux.filternum; in pvr2_dvb_adapter_init()
289 adap->dmxdev.demux = &adap->demux.dmx; in pvr2_dvb_adapter_init()
290 adap->dmxdev.capabilities = 0; in pvr2_dvb_adapter_init()
292 ret = dvb_dmxdev_init(&adap->dmxdev, &adap->dvb_adap); in pvr2_dvb_adapter_init()
299 dvb_net_init(&adap->dvb_adap, &adap->dvb_net, &adap->demux.dmx); in pvr2_dvb_adapter_init()
304 dvb_dmx_release(&adap->demux); in pvr2_dvb_adapter_init()
306 dvb_unregister_adapter(&adap->dvb_adap); in pvr2_dvb_adapter_init()
311 static int pvr2_dvb_adapter_exit(struct pvr2_dvb_adapter *adap) in pvr2_dvb_adapter_exit() argument
314 dvb_net_release(&adap->dvb_net); in pvr2_dvb_adapter_exit()
315 adap->demux.dmx.close(&adap->demux.dmx); in pvr2_dvb_adapter_exit()
316 dvb_dmxdev_release(&adap->dmxdev); in pvr2_dvb_adapter_exit()
317 dvb_dmx_release(&adap->demux); in pvr2_dvb_adapter_exit()
318 dvb_unregister_adapter(&adap->dvb_adap); in pvr2_dvb_adapter_exit()
322 static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap) in pvr2_dvb_frontend_init() argument
324 struct pvr2_hdw *hdw = adap->channel.hdw; in pvr2_dvb_frontend_init()
334 &adap->channel, in pvr2_dvb_frontend_init()
350 if ((dvb_props->frontend_attach(adap) == 0) && (adap->fe)) { in pvr2_dvb_frontend_init()
352 if (dvb_register_frontend(&adap->dvb_adap, adap->fe)) { in pvr2_dvb_frontend_init()
355 dvb_frontend_detach(adap->fe); in pvr2_dvb_frontend_init()
356 adap->fe = NULL; in pvr2_dvb_frontend_init()
362 dvb_props->tuner_attach(adap); in pvr2_dvb_frontend_init()
364 if (adap->fe->ops.analog_ops.standby) in pvr2_dvb_frontend_init()
365 adap->fe->ops.analog_ops.standby(adap->fe); in pvr2_dvb_frontend_init()
368 adap->fe->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl; in pvr2_dvb_frontend_init()
378 pvr2_channel_limit_inputs(&adap->channel, 0); in pvr2_dvb_frontend_init()
382 static int pvr2_dvb_frontend_exit(struct pvr2_dvb_adapter *adap) in pvr2_dvb_frontend_exit() argument
384 if (adap->fe != NULL) { in pvr2_dvb_frontend_exit()
385 dvb_unregister_frontend(adap->fe); in pvr2_dvb_frontend_exit()
386 dvb_frontend_detach(adap->fe); in pvr2_dvb_frontend_exit()
391 static void pvr2_dvb_destroy(struct pvr2_dvb_adapter *adap) in pvr2_dvb_destroy() argument
393 pvr2_dvb_stream_end(adap); in pvr2_dvb_destroy()
394 pvr2_dvb_frontend_exit(adap); in pvr2_dvb_destroy()
395 pvr2_dvb_adapter_exit(adap); in pvr2_dvb_destroy()
396 pvr2_channel_done(&adap->channel); in pvr2_dvb_destroy()
397 kfree(adap); in pvr2_dvb_destroy()
402 struct pvr2_dvb_adapter *adap; in pvr2_dvb_internal_check() local
403 adap = container_of(chp, struct pvr2_dvb_adapter, channel); in pvr2_dvb_internal_check()
404 if (!adap->channel.mc_head->disconnect_flag) return; in pvr2_dvb_internal_check()
405 pvr2_dvb_destroy(adap); in pvr2_dvb_internal_check()
411 struct pvr2_dvb_adapter *adap; in pvr2_dvb_create() local
417 adap = kzalloc(sizeof(*adap), GFP_KERNEL); in pvr2_dvb_create()
418 if (!adap) return adap; in pvr2_dvb_create()
419 pvr2_channel_init(&adap->channel, pvr); in pvr2_dvb_create()
420 adap->channel.check_func = pvr2_dvb_internal_check; in pvr2_dvb_create()
421 init_waitqueue_head(&adap->buffer_wait_data); in pvr2_dvb_create()
422 mutex_init(&adap->lock); in pvr2_dvb_create()
423 ret = pvr2_dvb_adapter_init(adap); in pvr2_dvb_create()
425 ret = pvr2_dvb_frontend_init(adap); in pvr2_dvb_create()
427 return adap; in pvr2_dvb_create()
430 pvr2_dvb_adapter_exit(adap); in pvr2_dvb_create()
432 pvr2_channel_done(&adap->channel); in pvr2_dvb_create()