Lines Matching refs:adap
30 static int pvr2_dvb_feed_func(struct pvr2_dvb_adapter *adap) in pvr2_dvb_feed_func() argument
40 stream = adap->channel.stream->stream; in pvr2_dvb_feed_func()
53 &adap->demux, in pvr2_dvb_feed_func()
54 adap->buffer_storage[ in pvr2_dvb_feed_func()
75 adap->buffer_wait_data, in pvr2_dvb_feed_func()
100 static void pvr2_dvb_notify(struct pvr2_dvb_adapter *adap) in pvr2_dvb_notify() argument
102 wake_up(&adap->buffer_wait_data); in pvr2_dvb_notify()
105 static void pvr2_dvb_stream_end(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_end() argument
110 if (adap->thread) { in pvr2_dvb_stream_end()
111 kthread_stop(adap->thread); in pvr2_dvb_stream_end()
112 adap->thread = NULL; in pvr2_dvb_stream_end()
115 if (adap->channel.stream) { in pvr2_dvb_stream_end()
116 stream = adap->channel.stream->stream; in pvr2_dvb_stream_end()
121 pvr2_hdw_set_streaming(adap->channel.hdw, 0); in pvr2_dvb_stream_end()
125 pvr2_channel_claim_stream(&adap->channel, NULL); in pvr2_dvb_stream_end()
128 if (adap->stream_run) { in pvr2_dvb_stream_end()
130 if (!(adap->buffer_storage[idx])) continue; in pvr2_dvb_stream_end()
131 kfree(adap->buffer_storage[idx]); in pvr2_dvb_stream_end()
132 adap->buffer_storage[idx] = NULL; in pvr2_dvb_stream_end()
134 adap->stream_run = 0; in pvr2_dvb_stream_end()
138 static int pvr2_dvb_stream_do_start(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_do_start() argument
140 struct pvr2_context *pvr = adap->channel.mc_head; in pvr2_dvb_stream_do_start()
146 if (adap->stream_run) return -EIO; in pvr2_dvb_stream_do_start()
148 ret = pvr2_channel_claim_stream(&adap->channel, &pvr->video_stream); in pvr2_dvb_stream_do_start()
152 stream = adap->channel.stream->stream; in pvr2_dvb_stream_do_start()
155 adap->buffer_storage[idx] = kmalloc(PVR2_DVB_BUFFER_SIZE, in pvr2_dvb_stream_do_start()
157 if (!(adap->buffer_storage[idx])) return -ENOMEM; in pvr2_dvb_stream_do_start()
161 (pvr2_stream_callback) pvr2_dvb_notify, adap); in pvr2_dvb_stream_do_start()
169 adap->buffer_storage[idx], in pvr2_dvb_stream_do_start()
173 ret = pvr2_hdw_set_streaming(adap->channel.hdw, 1); in pvr2_dvb_stream_do_start()
181 adap->thread = kthread_run(pvr2_dvb_feed_thread, adap, "pvrusb2-dvb"); in pvr2_dvb_stream_do_start()
183 if (IS_ERR(adap->thread)) { in pvr2_dvb_stream_do_start()
184 ret = PTR_ERR(adap->thread); in pvr2_dvb_stream_do_start()
185 adap->thread = NULL; in pvr2_dvb_stream_do_start()
189 adap->stream_run = !0; in pvr2_dvb_stream_do_start()
194 static int pvr2_dvb_stream_start(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_start() argument
196 int ret = pvr2_dvb_stream_do_start(adap); in pvr2_dvb_stream_start()
197 if (ret < 0) pvr2_dvb_stream_end(adap); in pvr2_dvb_stream_start()
203 struct pvr2_dvb_adapter *adap = dvbdmxfeed->demux->priv; in pvr2_dvb_ctrl_feed() local
206 if (adap == NULL) return -ENODEV; in pvr2_dvb_ctrl_feed()
208 mutex_lock(&adap->lock); in pvr2_dvb_ctrl_feed()
211 if (!adap->feedcount) { in pvr2_dvb_ctrl_feed()
214 ret = pvr2_dvb_stream_start(adap); in pvr2_dvb_ctrl_feed()
217 (adap->feedcount)++; in pvr2_dvb_ctrl_feed()
218 } else if (adap->feedcount > 0) { in pvr2_dvb_ctrl_feed()
219 (adap->feedcount)--; in pvr2_dvb_ctrl_feed()
220 if (!adap->feedcount) { in pvr2_dvb_ctrl_feed()
223 pvr2_dvb_stream_end(adap); in pvr2_dvb_ctrl_feed()
227 mutex_unlock(&adap->lock); in pvr2_dvb_ctrl_feed()
246 struct pvr2_dvb_adapter *adap = fe->dvb->priv; in pvr2_dvb_bus_ctrl() local
248 &adap->channel, in pvr2_dvb_bus_ctrl()
252 static int pvr2_dvb_adapter_init(struct pvr2_dvb_adapter *adap) in pvr2_dvb_adapter_init() argument
256 ret = dvb_register_adapter(&adap->dvb_adap, "pvrusb2-dvb", in pvr2_dvb_adapter_init()
258 &adap->channel.hdw->usb_dev->dev, in pvr2_dvb_adapter_init()
265 adap->dvb_adap.priv = adap; in pvr2_dvb_adapter_init()
267 adap->demux.dmx.capabilities = DMX_TS_FILTERING | in pvr2_dvb_adapter_init()
270 adap->demux.priv = adap; in pvr2_dvb_adapter_init()
271 adap->demux.filternum = 256; in pvr2_dvb_adapter_init()
272 adap->demux.feednum = 256; in pvr2_dvb_adapter_init()
273 adap->demux.start_feed = pvr2_dvb_start_feed; in pvr2_dvb_adapter_init()
274 adap->demux.stop_feed = pvr2_dvb_stop_feed; in pvr2_dvb_adapter_init()
275 adap->demux.write_to_decoder = NULL; in pvr2_dvb_adapter_init()
277 ret = dvb_dmx_init(&adap->demux); in pvr2_dvb_adapter_init()
284 adap->dmxdev.filternum = adap->demux.filternum; in pvr2_dvb_adapter_init()
285 adap->dmxdev.demux = &adap->demux.dmx; in pvr2_dvb_adapter_init()
286 adap->dmxdev.capabilities = 0; in pvr2_dvb_adapter_init()
288 ret = dvb_dmxdev_init(&adap->dmxdev, &adap->dvb_adap); in pvr2_dvb_adapter_init()
295 dvb_net_init(&adap->dvb_adap, &adap->dvb_net, &adap->demux.dmx); in pvr2_dvb_adapter_init()
300 dvb_dmx_release(&adap->demux); in pvr2_dvb_adapter_init()
302 dvb_unregister_adapter(&adap->dvb_adap); in pvr2_dvb_adapter_init()
307 static int pvr2_dvb_adapter_exit(struct pvr2_dvb_adapter *adap) in pvr2_dvb_adapter_exit() argument
310 dvb_net_release(&adap->dvb_net); in pvr2_dvb_adapter_exit()
311 adap->demux.dmx.close(&adap->demux.dmx); in pvr2_dvb_adapter_exit()
312 dvb_dmxdev_release(&adap->dmxdev); in pvr2_dvb_adapter_exit()
313 dvb_dmx_release(&adap->demux); in pvr2_dvb_adapter_exit()
314 dvb_unregister_adapter(&adap->dvb_adap); in pvr2_dvb_adapter_exit()
318 static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap) in pvr2_dvb_frontend_init() argument
320 struct pvr2_hdw *hdw = adap->channel.hdw; in pvr2_dvb_frontend_init()
330 &adap->channel, in pvr2_dvb_frontend_init()
346 if ((dvb_props->frontend_attach(adap) == 0) && (adap->fe)) { in pvr2_dvb_frontend_init()
348 if (dvb_register_frontend(&adap->dvb_adap, adap->fe)) { in pvr2_dvb_frontend_init()
351 dvb_frontend_detach(adap->fe); in pvr2_dvb_frontend_init()
352 adap->fe = NULL; in pvr2_dvb_frontend_init()
358 dvb_props->tuner_attach(adap); in pvr2_dvb_frontend_init()
360 if (adap->fe->ops.analog_ops.standby) in pvr2_dvb_frontend_init()
361 adap->fe->ops.analog_ops.standby(adap->fe); in pvr2_dvb_frontend_init()
364 adap->fe->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl; in pvr2_dvb_frontend_init()
374 pvr2_channel_limit_inputs(&adap->channel, 0); in pvr2_dvb_frontend_init()
378 static int pvr2_dvb_frontend_exit(struct pvr2_dvb_adapter *adap) in pvr2_dvb_frontend_exit() argument
380 if (adap->fe != NULL) { in pvr2_dvb_frontend_exit()
381 dvb_unregister_frontend(adap->fe); in pvr2_dvb_frontend_exit()
382 dvb_frontend_detach(adap->fe); in pvr2_dvb_frontend_exit()
387 static void pvr2_dvb_destroy(struct pvr2_dvb_adapter *adap) in pvr2_dvb_destroy() argument
389 pvr2_dvb_stream_end(adap); in pvr2_dvb_destroy()
390 pvr2_dvb_frontend_exit(adap); in pvr2_dvb_destroy()
391 pvr2_dvb_adapter_exit(adap); in pvr2_dvb_destroy()
392 pvr2_channel_done(&adap->channel); in pvr2_dvb_destroy()
393 kfree(adap); in pvr2_dvb_destroy()
398 struct pvr2_dvb_adapter *adap; in pvr2_dvb_internal_check() local
399 adap = container_of(chp, struct pvr2_dvb_adapter, channel); in pvr2_dvb_internal_check()
400 if (!adap->channel.mc_head->disconnect_flag) return; in pvr2_dvb_internal_check()
401 pvr2_dvb_destroy(adap); in pvr2_dvb_internal_check()
407 struct pvr2_dvb_adapter *adap; in pvr2_dvb_create() local
413 adap = kzalloc(sizeof(*adap), GFP_KERNEL); in pvr2_dvb_create()
414 if (!adap) return adap; in pvr2_dvb_create()
415 pvr2_channel_init(&adap->channel, pvr); in pvr2_dvb_create()
416 adap->channel.check_func = pvr2_dvb_internal_check; in pvr2_dvb_create()
417 init_waitqueue_head(&adap->buffer_wait_data); in pvr2_dvb_create()
418 mutex_init(&adap->lock); in pvr2_dvb_create()
419 ret = pvr2_dvb_adapter_init(adap); in pvr2_dvb_create()
421 ret = pvr2_dvb_frontend_init(adap); in pvr2_dvb_create()
423 return adap; in pvr2_dvb_create()
426 pvr2_dvb_adapter_exit(adap); in pvr2_dvb_create()
428 pvr2_channel_done(&adap->channel); in pvr2_dvb_create()