Lines Matching refs:budget

47 static int stop_ts_capture(struct budget *budget)  in stop_ts_capture()  argument
49 dprintk(2, "budget: %p\n", budget); in stop_ts_capture()
51 saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off in stop_ts_capture()
52 SAA7146_IER_DISABLE(budget->dev, MASK_10); in stop_ts_capture()
56 static int start_ts_capture(struct budget *budget) in start_ts_capture() argument
58 struct saa7146_dev *dev = budget->dev; in start_ts_capture()
60 dprintk(2, "budget: %p\n", budget); in start_ts_capture()
62 if (!budget->feeding || !budget->fe_synced) in start_ts_capture()
67 memset(budget->grabbing, 0x00, budget->buffer_size); in start_ts_capture()
71 budget->ttbp = 0; in start_ts_capture()
83 switch(budget->card->type) { in start_ts_capture()
98 if (budget->video_port == BUDGET_VIDEO_PORTA) { in start_ts_capture()
109 if (budget->video_port == BUDGET_VIDEO_PORTA) { in start_ts_capture()
124 if (budget->buffer_size > budget->buffer_height * budget->buffer_width) { in start_ts_capture()
126 saa7146_write(dev, BASE_EVEN3, budget->buffer_height * budget->buffer_width); in start_ts_capture()
131 saa7146_write(dev, PROT_ADDR3, budget->buffer_size); in start_ts_capture()
132 saa7146_write(dev, BASE_PAGE3, budget->pt.dma | ME1 | 0x90); in start_ts_capture()
134 saa7146_write(dev, PITCH3, budget->buffer_width); in start_ts_capture()
136 (budget->buffer_height << 16) | budget->buffer_width); in start_ts_capture()
140 SAA7146_ISR_CLEAR(budget->dev, MASK_10); /* VPE */ in start_ts_capture()
141 SAA7146_IER_ENABLE(budget->dev, MASK_10); /* VPE */ in start_ts_capture()
150 struct budget *budget = fe->dvb->priv; in budget_read_fe_status() local
154 if (budget->read_fe_status) in budget_read_fe_status()
155 ret = budget->read_fe_status(fe, status); in budget_read_fe_status()
161 if (synced != budget->fe_synced) { in budget_read_fe_status()
162 budget->fe_synced = synced; in budget_read_fe_status()
163 spin_lock(&budget->feedlock); in budget_read_fe_status()
165 start_ts_capture(budget); in budget_read_fe_status()
167 stop_ts_capture(budget); in budget_read_fe_status()
168 spin_unlock(&budget->feedlock); in budget_read_fe_status()
176 struct budget *budget = from_tasklet(budget, t, vpe_tasklet); in vpeirq() local
177 u8 *mem = (u8 *) (budget->grabbing); in vpeirq()
178 u32 olddma = budget->ttbp; in vpeirq()
179 u32 newdma = saa7146_read(budget->dev, PCI_VDP3); in vpeirq()
183 dma_sync_sg_for_cpu(&budget->dev->pci->dev, budget->pt.slist, in vpeirq()
184 budget->pt.nents, DMA_FROM_DEVICE); in vpeirq()
189 if (newdma >= budget->buffer_size) in vpeirq()
192 budget->ttbp = newdma; in vpeirq()
194 if (budget->feeding == 0 || newdma == olddma) in vpeirq()
199 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188); in vpeirq()
201 count = budget->buffer_size - olddma; in vpeirq()
202 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188); in vpeirq()
204 dvb_dmx_swfilter_packets(&budget->demux, mem, newdma / 188); in vpeirq()
207 if (count > budget->buffer_warning_threshold) in vpeirq()
208 budget->buffer_warnings++; in vpeirq()
210 if (budget->buffer_warnings && time_after(jiffies, budget->buffer_warning_time)) { in vpeirq()
212 budget->dev->name, __func__, budget->buffer_warnings, count); in vpeirq()
213 budget->buffer_warning_time = jiffies + BUFFER_WARNING_WAIT; in vpeirq()
214 budget->buffer_warnings = 0; in vpeirq()
219 static int ttpci_budget_debiread_nolock(struct budget *budget, u32 config, in ttpci_budget_debiread_nolock() argument
222 struct saa7146_dev *saa = budget->dev; in ttpci_budget_debiread_nolock()
243 int ttpci_budget_debiread(struct budget *budget, u32 config, int addr, int count, in ttpci_budget_debiread() argument
253 spin_lock_irqsave(&budget->debilock, flags); in ttpci_budget_debiread()
254 result = ttpci_budget_debiread_nolock(budget, config, addr, in ttpci_budget_debiread()
256 spin_unlock_irqrestore(&budget->debilock, flags); in ttpci_budget_debiread()
259 return ttpci_budget_debiread_nolock(budget, config, addr, in ttpci_budget_debiread()
263 static int ttpci_budget_debiwrite_nolock(struct budget *budget, u32 config, in ttpci_budget_debiwrite_nolock() argument
266 struct saa7146_dev *saa = budget->dev; in ttpci_budget_debiwrite_nolock()
283 int ttpci_budget_debiwrite(struct budget *budget, u32 config, int addr, in ttpci_budget_debiwrite() argument
293 spin_lock_irqsave(&budget->debilock, flags); in ttpci_budget_debiwrite()
294 result = ttpci_budget_debiwrite_nolock(budget, config, addr, in ttpci_budget_debiwrite()
296 spin_unlock_irqrestore(&budget->debilock, flags); in ttpci_budget_debiwrite()
299 return ttpci_budget_debiwrite_nolock(budget, config, addr, in ttpci_budget_debiwrite()
311 struct budget *budget = demux->priv; in budget_start_feed() local
314 dprintk(2, "budget: %p\n", budget); in budget_start_feed()
319 spin_lock(&budget->feedlock); in budget_start_feed()
321 if (budget->feeding++ == 0) in budget_start_feed()
322 status = start_ts_capture(budget); in budget_start_feed()
323 spin_unlock(&budget->feedlock); in budget_start_feed()
330 struct budget *budget = demux->priv; in budget_stop_feed() local
333 dprintk(2, "budget: %p\n", budget); in budget_stop_feed()
335 spin_lock(&budget->feedlock); in budget_stop_feed()
336 if (--budget->feeding == 0) in budget_stop_feed()
337 status = stop_ts_capture(budget); in budget_stop_feed()
338 spin_unlock(&budget->feedlock); in budget_stop_feed()
342 static int budget_register(struct budget *budget) in budget_register() argument
344 struct dvb_demux *dvbdemux = &budget->demux; in budget_register()
347 dprintk(2, "budget: %p\n", budget); in budget_register()
349 dvbdemux->priv = (void *) budget; in budget_register()
360 dvb_dmx_init(&budget->demux); in budget_register()
362 budget->dmxdev.filternum = 256; in budget_register()
363 budget->dmxdev.demux = &dvbdemux->dmx; in budget_register()
364 budget->dmxdev.capabilities = 0; in budget_register()
366 dvb_dmxdev_init(&budget->dmxdev, &budget->dvb_adapter); in budget_register()
368 budget->hw_frontend.source = DMX_FRONTEND_0; in budget_register()
370 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_register()
375 budget->mem_frontend.source = DMX_MEMORY_FE; in budget_register()
376 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->mem_frontend); in budget_register()
380 ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_register()
384 dvb_net_init(&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx); in budget_register()
389 dvb_dmxdev_release(&budget->dmxdev); in budget_register()
390 dvb_dmx_release(&budget->demux); in budget_register()
394 static void budget_unregister(struct budget *budget) in budget_unregister() argument
396 struct dvb_demux *dvbdemux = &budget->demux; in budget_unregister()
398 dprintk(2, "budget: %p\n", budget); in budget_unregister()
400 dvb_net_release(&budget->dvb_net); in budget_unregister()
403 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_unregister()
404 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->mem_frontend); in budget_unregister()
406 dvb_dmxdev_release(&budget->dmxdev); in budget_unregister()
407 dvb_dmx_release(&budget->demux); in budget_unregister()
410 int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, in ttpci_budget_init() argument
419 memset(budget, 0, sizeof(struct budget)); in ttpci_budget_init()
421 dprintk(2, "dev: %p, budget: %p\n", dev, budget); in ttpci_budget_init()
423 budget->card = bi; in ttpci_budget_init()
424 budget->dev = (struct saa7146_dev *) dev; in ttpci_budget_init()
426 switch(budget->card->type) { in ttpci_budget_init()
428 budget->buffer_width = TS_WIDTH_ACTIVY; in ttpci_budget_init()
440 budget->buffer_width = TS_WIDTH_DVBC; in ttpci_budget_init()
446 budget->buffer_width = TS_WIDTH; in ttpci_budget_init()
456 budget->buffer_height = dma_buffer_size * 1024 / budget->buffer_width; in ttpci_budget_init()
457 if (budget->buffer_height > 0xfff) { in ttpci_budget_init()
458 budget->buffer_height /= 2; in ttpci_budget_init()
459 budget->buffer_height &= height_mask; in ttpci_budget_init()
460 budget->buffer_size = 2 * budget->buffer_height * budget->buffer_width; in ttpci_budget_init()
462 budget->buffer_height &= height_mask; in ttpci_budget_init()
463 budget->buffer_size = budget->buffer_height * budget->buffer_width; in ttpci_budget_init()
465 budget->buffer_warning_threshold = budget->buffer_size * 80/100; in ttpci_budget_init()
466 budget->buffer_warnings = 0; in ttpci_budget_init()
467 budget->buffer_warning_time = jiffies; in ttpci_budget_init()
470 budget->dev->name, in ttpci_budget_init()
471 budget->buffer_size > budget->buffer_width * budget->buffer_height ? "odd/even" : "single", in ttpci_budget_init()
472 budget->buffer_width, budget->buffer_height); in ttpci_budget_init()
473 printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size); in ttpci_budget_init()
475 ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name, in ttpci_budget_init()
476 owner, &budget->dev->pci->dev, adapter_nums); in ttpci_budget_init()
488 budget->video_port = BUDGET_VIDEO_PORTB; in ttpci_budget_init()
490 budget->video_port = BUDGET_VIDEO_PORTA; in ttpci_budget_init()
491 spin_lock_init(&budget->feedlock); in ttpci_budget_init()
492 spin_lock_init(&budget->debilock); in ttpci_budget_init()
499 strscpy(budget->i2c_adap.name, budget->card->name, in ttpci_budget_init()
500 sizeof(budget->i2c_adap.name)); in ttpci_budget_init()
502 saa7146_i2c_adapter_prepare(dev, &budget->i2c_adap, SAA7146_I2C_BUS_BIT_RATE_120); in ttpci_budget_init()
503 strscpy(budget->i2c_adap.name, budget->card->name, in ttpci_budget_init()
504 sizeof(budget->i2c_adap.name)); in ttpci_budget_init()
506 if (i2c_add_adapter(&budget->i2c_adap) < 0) { in ttpci_budget_init()
511 ttpci_eeprom_parse_mac(&budget->i2c_adap, budget->dvb_adapter.proposed_mac); in ttpci_budget_init()
513 budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci, budget->buffer_size, &budget->pt); in ttpci_budget_init()
514 if (NULL == budget->grabbing) { in ttpci_budget_init()
523 tasklet_setup(&budget->vpe_tasklet, vpeirq); in ttpci_budget_init()
529 if ((ret = budget_register(budget)) == 0) in ttpci_budget_init()
533 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt); in ttpci_budget_init()
536 i2c_del_adapter(&budget->i2c_adap); in ttpci_budget_init()
539 dvb_unregister_adapter(&budget->dvb_adapter); in ttpci_budget_init()
544 void ttpci_budget_init_hooks(struct budget *budget) in ttpci_budget_init_hooks() argument
546 if (budget->dvb_frontend && !budget->read_fe_status) { in ttpci_budget_init_hooks()
547 budget->read_fe_status = budget->dvb_frontend->ops.read_status; in ttpci_budget_init_hooks()
548 budget->dvb_frontend->ops.read_status = budget_read_fe_status; in ttpci_budget_init_hooks()
552 int ttpci_budget_deinit(struct budget *budget) in ttpci_budget_deinit() argument
554 struct saa7146_dev *dev = budget->dev; in ttpci_budget_deinit()
556 dprintk(2, "budget: %p\n", budget); in ttpci_budget_deinit()
558 budget_unregister(budget); in ttpci_budget_deinit()
560 tasklet_kill(&budget->vpe_tasklet); in ttpci_budget_deinit()
562 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt); in ttpci_budget_deinit()
564 i2c_del_adapter(&budget->i2c_adap); in ttpci_budget_deinit()
566 dvb_unregister_adapter(&budget->dvb_adapter); in ttpci_budget_deinit()
573 struct budget *budget = dev->ext_priv; in ttpci_budget_irq10_handler() local
575 dprintk(8, "dev: %p, budget: %p\n", dev, budget); in ttpci_budget_irq10_handler()
578 tasklet_schedule(&budget->vpe_tasklet); in ttpci_budget_irq10_handler()
583 struct budget *budget = dev->ext_priv; in ttpci_budget_set_video_port() local
585 spin_lock(&budget->feedlock); in ttpci_budget_set_video_port()
586 budget->video_port = video_port; in ttpci_budget_set_video_port()
587 if (budget->feeding) { in ttpci_budget_set_video_port()
588 stop_ts_capture(budget); in ttpci_budget_set_video_port()
589 start_ts_capture(budget); in ttpci_budget_set_video_port()
591 spin_unlock(&budget->feedlock); in ttpci_budget_set_video_port()