• Home
  • Raw
  • Download

Lines Matching refs:budget

64 static int stop_ts_capture(struct budget *budget)  in stop_ts_capture()  argument
66 dprintk(2, "budget: %p\n", budget); in stop_ts_capture()
68 saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off in stop_ts_capture()
69 SAA7146_IER_DISABLE(budget->dev, MASK_10); in stop_ts_capture()
73 static int start_ts_capture(struct budget *budget) in start_ts_capture() argument
75 struct saa7146_dev *dev = budget->dev; in start_ts_capture()
77 dprintk(2, "budget: %p\n", budget); in start_ts_capture()
79 if (!budget->feeding || !budget->fe_synced) in start_ts_capture()
84 memset(budget->grabbing, 0x00, budget->buffer_size); in start_ts_capture()
88 budget->ttbp = 0; in start_ts_capture()
100 switch(budget->card->type) { in start_ts_capture()
115 if (budget->video_port == BUDGET_VIDEO_PORTA) { in start_ts_capture()
126 if (budget->video_port == BUDGET_VIDEO_PORTA) { in start_ts_capture()
141 if (budget->buffer_size > budget->buffer_height * budget->buffer_width) { in start_ts_capture()
143 saa7146_write(dev, BASE_EVEN3, budget->buffer_height * budget->buffer_width); in start_ts_capture()
148 saa7146_write(dev, PROT_ADDR3, budget->buffer_size); in start_ts_capture()
149 saa7146_write(dev, BASE_PAGE3, budget->pt.dma | ME1 | 0x90); in start_ts_capture()
151 saa7146_write(dev, PITCH3, budget->buffer_width); in start_ts_capture()
153 (budget->buffer_height << 16) | budget->buffer_width); in start_ts_capture()
157 SAA7146_ISR_CLEAR(budget->dev, MASK_10); /* VPE */ in start_ts_capture()
158 SAA7146_IER_ENABLE(budget->dev, MASK_10); /* VPE */ in start_ts_capture()
167 struct budget *budget = (struct budget *) fe->dvb->priv; in budget_read_fe_status() local
171 if (budget->read_fe_status) in budget_read_fe_status()
172 ret = budget->read_fe_status(fe, status); in budget_read_fe_status()
178 if (synced != budget->fe_synced) { in budget_read_fe_status()
179 budget->fe_synced = synced; in budget_read_fe_status()
180 spin_lock(&budget->feedlock); in budget_read_fe_status()
182 start_ts_capture(budget); in budget_read_fe_status()
184 stop_ts_capture(budget); in budget_read_fe_status()
185 spin_unlock(&budget->feedlock); in budget_read_fe_status()
193 struct budget *budget = (struct budget *) data; in vpeirq() local
194 u8 *mem = (u8 *) (budget->grabbing); in vpeirq()
195 u32 olddma = budget->ttbp; in vpeirq()
196 u32 newdma = saa7146_read(budget->dev, PCI_VDP3); in vpeirq()
200 pci_dma_sync_sg_for_cpu(budget->dev->pci, budget->pt.slist, budget->pt.nents, PCI_DMA_FROMDEVICE); in vpeirq()
205 if (newdma >= budget->buffer_size) in vpeirq()
208 budget->ttbp = newdma; in vpeirq()
210 if (budget->feeding == 0 || newdma == olddma) in vpeirq()
215 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188); in vpeirq()
217 count = budget->buffer_size - olddma; in vpeirq()
218 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188); in vpeirq()
220 dvb_dmx_swfilter_packets(&budget->demux, mem, newdma / 188); in vpeirq()
223 if (count > budget->buffer_warning_threshold) in vpeirq()
224 budget->buffer_warnings++; in vpeirq()
226 if (budget->buffer_warnings && time_after(jiffies, budget->buffer_warning_time)) { in vpeirq()
228 budget->dev->name, __func__, budget->buffer_warnings, count); in vpeirq()
229 budget->buffer_warning_time = jiffies + BUFFER_WARNING_WAIT; in vpeirq()
230 budget->buffer_warnings = 0; in vpeirq()
235 static int ttpci_budget_debiread_nolock(struct budget *budget, u32 config, in ttpci_budget_debiread_nolock() argument
238 struct saa7146_dev *saa = budget->dev; in ttpci_budget_debiread_nolock()
259 int ttpci_budget_debiread(struct budget *budget, u32 config, int addr, int count, in ttpci_budget_debiread() argument
269 spin_lock_irqsave(&budget->debilock, flags); in ttpci_budget_debiread()
270 result = ttpci_budget_debiread_nolock(budget, config, addr, in ttpci_budget_debiread()
272 spin_unlock_irqrestore(&budget->debilock, flags); in ttpci_budget_debiread()
275 return ttpci_budget_debiread_nolock(budget, config, addr, in ttpci_budget_debiread()
279 static int ttpci_budget_debiwrite_nolock(struct budget *budget, u32 config, in ttpci_budget_debiwrite_nolock() argument
282 struct saa7146_dev *saa = budget->dev; in ttpci_budget_debiwrite_nolock()
299 int ttpci_budget_debiwrite(struct budget *budget, u32 config, int addr, in ttpci_budget_debiwrite() argument
309 spin_lock_irqsave(&budget->debilock, flags); in ttpci_budget_debiwrite()
310 result = ttpci_budget_debiwrite_nolock(budget, config, addr, in ttpci_budget_debiwrite()
312 spin_unlock_irqrestore(&budget->debilock, flags); in ttpci_budget_debiwrite()
315 return ttpci_budget_debiwrite_nolock(budget, config, addr, in ttpci_budget_debiwrite()
327 struct budget *budget = (struct budget *) demux->priv; in budget_start_feed() local
330 dprintk(2, "budget: %p\n", budget); in budget_start_feed()
335 spin_lock(&budget->feedlock); in budget_start_feed()
337 if (budget->feeding++ == 0) in budget_start_feed()
338 status = start_ts_capture(budget); in budget_start_feed()
339 spin_unlock(&budget->feedlock); in budget_start_feed()
346 struct budget *budget = (struct budget *) demux->priv; in budget_stop_feed() local
349 dprintk(2, "budget: %p\n", budget); in budget_stop_feed()
351 spin_lock(&budget->feedlock); in budget_stop_feed()
352 if (--budget->feeding == 0) in budget_stop_feed()
353 status = stop_ts_capture(budget); in budget_stop_feed()
354 spin_unlock(&budget->feedlock); in budget_stop_feed()
358 static int budget_register(struct budget *budget) in budget_register() argument
360 struct dvb_demux *dvbdemux = &budget->demux; in budget_register()
363 dprintk(2, "budget: %p\n", budget); in budget_register()
365 dvbdemux->priv = (void *) budget; in budget_register()
376 dvb_dmx_init(&budget->demux); in budget_register()
378 budget->dmxdev.filternum = 256; in budget_register()
379 budget->dmxdev.demux = &dvbdemux->dmx; in budget_register()
380 budget->dmxdev.capabilities = 0; in budget_register()
382 dvb_dmxdev_init(&budget->dmxdev, &budget->dvb_adapter); in budget_register()
384 budget->hw_frontend.source = DMX_FRONTEND_0; in budget_register()
386 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_register()
391 budget->mem_frontend.source = DMX_MEMORY_FE; in budget_register()
392 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->mem_frontend); in budget_register()
396 ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_register()
400 dvb_net_init(&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx); in budget_register()
405 dvb_dmxdev_release(&budget->dmxdev); in budget_register()
406 dvb_dmx_release(&budget->demux); in budget_register()
410 static void budget_unregister(struct budget *budget) in budget_unregister() argument
412 struct dvb_demux *dvbdemux = &budget->demux; in budget_unregister()
414 dprintk(2, "budget: %p\n", budget); in budget_unregister()
416 dvb_net_release(&budget->dvb_net); in budget_unregister()
419 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_unregister()
420 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->mem_frontend); in budget_unregister()
422 dvb_dmxdev_release(&budget->dmxdev); in budget_unregister()
423 dvb_dmx_release(&budget->demux); in budget_unregister()
426 int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, in ttpci_budget_init() argument
435 memset(budget, 0, sizeof(struct budget)); in ttpci_budget_init()
437 dprintk(2, "dev: %p, budget: %p\n", dev, budget); in ttpci_budget_init()
439 budget->card = bi; in ttpci_budget_init()
440 budget->dev = (struct saa7146_dev *) dev; in ttpci_budget_init()
442 switch(budget->card->type) { in ttpci_budget_init()
444 budget->buffer_width = TS_WIDTH_ACTIVY; in ttpci_budget_init()
456 budget->buffer_width = TS_WIDTH_DVBC; in ttpci_budget_init()
462 budget->buffer_width = TS_WIDTH; in ttpci_budget_init()
472 budget->buffer_height = dma_buffer_size * 1024 / budget->buffer_width; in ttpci_budget_init()
473 if (budget->buffer_height > 0xfff) { in ttpci_budget_init()
474 budget->buffer_height /= 2; in ttpci_budget_init()
475 budget->buffer_height &= height_mask; in ttpci_budget_init()
476 budget->buffer_size = 2 * budget->buffer_height * budget->buffer_width; in ttpci_budget_init()
478 budget->buffer_height &= height_mask; in ttpci_budget_init()
479 budget->buffer_size = budget->buffer_height * budget->buffer_width; in ttpci_budget_init()
481 budget->buffer_warning_threshold = budget->buffer_size * 80/100; in ttpci_budget_init()
482 budget->buffer_warnings = 0; in ttpci_budget_init()
483 budget->buffer_warning_time = jiffies; in ttpci_budget_init()
486 budget->dev->name, in ttpci_budget_init()
487 budget->buffer_size > budget->buffer_width * budget->buffer_height ? "odd/even" : "single", in ttpci_budget_init()
488 budget->buffer_width, budget->buffer_height); in ttpci_budget_init()
489 printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size); in ttpci_budget_init()
491 ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name, in ttpci_budget_init()
492 owner, &budget->dev->pci->dev, adapter_nums); in ttpci_budget_init()
504 budget->video_port = BUDGET_VIDEO_PORTB; in ttpci_budget_init()
506 budget->video_port = BUDGET_VIDEO_PORTA; in ttpci_budget_init()
507 spin_lock_init(&budget->feedlock); in ttpci_budget_init()
508 spin_lock_init(&budget->debilock); in ttpci_budget_init()
515 strlcpy(budget->i2c_adap.name, budget->card->name, sizeof(budget->i2c_adap.name)); in ttpci_budget_init()
517 saa7146_i2c_adapter_prepare(dev, &budget->i2c_adap, SAA7146_I2C_BUS_BIT_RATE_120); in ttpci_budget_init()
518 strcpy(budget->i2c_adap.name, budget->card->name); in ttpci_budget_init()
520 if (i2c_add_adapter(&budget->i2c_adap) < 0) { in ttpci_budget_init()
525 ttpci_eeprom_parse_mac(&budget->i2c_adap, budget->dvb_adapter.proposed_mac); in ttpci_budget_init()
527 budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci, budget->buffer_size, &budget->pt); in ttpci_budget_init()
528 if (NULL == budget->grabbing) { in ttpci_budget_init()
537 tasklet_init(&budget->vpe_tasklet, vpeirq, (unsigned long) budget); in ttpci_budget_init()
543 if ((ret = budget_register(budget)) == 0) in ttpci_budget_init()
547 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt); in ttpci_budget_init()
550 i2c_del_adapter(&budget->i2c_adap); in ttpci_budget_init()
553 dvb_unregister_adapter(&budget->dvb_adapter); in ttpci_budget_init()
558 void ttpci_budget_init_hooks(struct budget *budget) in ttpci_budget_init_hooks() argument
560 if (budget->dvb_frontend && !budget->read_fe_status) { in ttpci_budget_init_hooks()
561 budget->read_fe_status = budget->dvb_frontend->ops.read_status; in ttpci_budget_init_hooks()
562 budget->dvb_frontend->ops.read_status = budget_read_fe_status; in ttpci_budget_init_hooks()
566 int ttpci_budget_deinit(struct budget *budget) in ttpci_budget_deinit() argument
568 struct saa7146_dev *dev = budget->dev; in ttpci_budget_deinit()
570 dprintk(2, "budget: %p\n", budget); in ttpci_budget_deinit()
572 budget_unregister(budget); in ttpci_budget_deinit()
574 tasklet_kill(&budget->vpe_tasklet); in ttpci_budget_deinit()
576 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt); in ttpci_budget_deinit()
578 i2c_del_adapter(&budget->i2c_adap); in ttpci_budget_deinit()
580 dvb_unregister_adapter(&budget->dvb_adapter); in ttpci_budget_deinit()
587 struct budget *budget = (struct budget *) dev->ext_priv; in ttpci_budget_irq10_handler() local
589 dprintk(8, "dev: %p, budget: %p\n", dev, budget); in ttpci_budget_irq10_handler()
592 tasklet_schedule(&budget->vpe_tasklet); in ttpci_budget_irq10_handler()
597 struct budget *budget = (struct budget *) dev->ext_priv; in ttpci_budget_set_video_port() local
599 spin_lock(&budget->feedlock); in ttpci_budget_set_video_port()
600 budget->video_port = video_port; in ttpci_budget_set_video_port()
601 if (budget->feeding) { in ttpci_budget_set_video_port()
602 stop_ts_capture(budget); in ttpci_budget_set_video_port()
603 start_ts_capture(budget); in ttpci_budget_set_video_port()
605 spin_unlock(&budget->feedlock); in ttpci_budget_set_video_port()