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()
166 struct budget *budget = (struct budget *) fe->dvb->priv; in budget_read_fe_status() local
170 if (budget->read_fe_status) in budget_read_fe_status()
171 ret = budget->read_fe_status(fe, status); in budget_read_fe_status()
177 if (synced != budget->fe_synced) { in budget_read_fe_status()
178 budget->fe_synced = synced; in budget_read_fe_status()
179 spin_lock(&budget->feedlock); in budget_read_fe_status()
181 start_ts_capture(budget); in budget_read_fe_status()
183 stop_ts_capture(budget); in budget_read_fe_status()
184 spin_unlock(&budget->feedlock); in budget_read_fe_status()
192 struct budget *budget = (struct budget *) data; in vpeirq() local
193 u8 *mem = (u8 *) (budget->grabbing); in vpeirq()
194 u32 olddma = budget->ttbp; in vpeirq()
195 u32 newdma = saa7146_read(budget->dev, PCI_VDP3); in vpeirq()
199 pci_dma_sync_sg_for_cpu(budget->dev->pci, budget->pt.slist, budget->pt.nents, PCI_DMA_FROMDEVICE); in vpeirq()
204 if (newdma >= budget->buffer_size) in vpeirq()
207 budget->ttbp = newdma; in vpeirq()
209 if (budget->feeding == 0 || newdma == olddma) in vpeirq()
214 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188); in vpeirq()
216 count = budget->buffer_size - olddma; in vpeirq()
217 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188); in vpeirq()
219 dvb_dmx_swfilter_packets(&budget->demux, mem, newdma / 188); in vpeirq()
222 if (count > budget->buffer_warning_threshold) in vpeirq()
223 budget->buffer_warnings++; in vpeirq()
225 if (budget->buffer_warnings && time_after(jiffies, budget->buffer_warning_time)) { in vpeirq()
227 budget->dev->name, __func__, budget->buffer_warnings, count); in vpeirq()
228 budget->buffer_warning_time = jiffies + BUFFER_WARNING_WAIT; in vpeirq()
229 budget->buffer_warnings = 0; in vpeirq()
234 static int ttpci_budget_debiread_nolock(struct budget *budget, u32 config, in ttpci_budget_debiread_nolock() argument
237 struct saa7146_dev *saa = budget->dev; in ttpci_budget_debiread_nolock()
258 int ttpci_budget_debiread(struct budget *budget, u32 config, int addr, int count, in ttpci_budget_debiread() argument
268 spin_lock_irqsave(&budget->debilock, flags); in ttpci_budget_debiread()
269 result = ttpci_budget_debiread_nolock(budget, config, addr, in ttpci_budget_debiread()
271 spin_unlock_irqrestore(&budget->debilock, flags); in ttpci_budget_debiread()
274 return ttpci_budget_debiread_nolock(budget, config, addr, in ttpci_budget_debiread()
278 static int ttpci_budget_debiwrite_nolock(struct budget *budget, u32 config, in ttpci_budget_debiwrite_nolock() argument
281 struct saa7146_dev *saa = budget->dev; in ttpci_budget_debiwrite_nolock()
298 int ttpci_budget_debiwrite(struct budget *budget, u32 config, int addr, in ttpci_budget_debiwrite() argument
308 spin_lock_irqsave(&budget->debilock, flags); in ttpci_budget_debiwrite()
309 result = ttpci_budget_debiwrite_nolock(budget, config, addr, in ttpci_budget_debiwrite()
311 spin_unlock_irqrestore(&budget->debilock, flags); in ttpci_budget_debiwrite()
314 return ttpci_budget_debiwrite_nolock(budget, config, addr, in ttpci_budget_debiwrite()
326 struct budget *budget = (struct budget *) demux->priv; in budget_start_feed() local
329 dprintk(2, "budget: %p\n", budget); in budget_start_feed()
334 spin_lock(&budget->feedlock); in budget_start_feed()
336 if (budget->feeding++ == 0) in budget_start_feed()
337 status = start_ts_capture(budget); in budget_start_feed()
338 spin_unlock(&budget->feedlock); in budget_start_feed()
345 struct budget *budget = (struct budget *) demux->priv; in budget_stop_feed() local
348 dprintk(2, "budget: %p\n", budget); in budget_stop_feed()
350 spin_lock(&budget->feedlock); in budget_stop_feed()
351 if (--budget->feeding == 0) in budget_stop_feed()
352 status = stop_ts_capture(budget); in budget_stop_feed()
353 spin_unlock(&budget->feedlock); in budget_stop_feed()
357 static int budget_register(struct budget *budget) in budget_register() argument
359 struct dvb_demux *dvbdemux = &budget->demux; in budget_register()
362 dprintk(2, "budget: %p\n", budget); in budget_register()
364 dvbdemux->priv = (void *) budget; in budget_register()
375 dvb_dmx_init(&budget->demux); in budget_register()
377 budget->dmxdev.filternum = 256; in budget_register()
378 budget->dmxdev.demux = &dvbdemux->dmx; in budget_register()
379 budget->dmxdev.capabilities = 0; in budget_register()
381 dvb_dmxdev_init(&budget->dmxdev, &budget->dvb_adapter); in budget_register()
383 budget->hw_frontend.source = DMX_FRONTEND_0; in budget_register()
385 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_register()
390 budget->mem_frontend.source = DMX_MEMORY_FE; in budget_register()
391 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->mem_frontend); in budget_register()
395 ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_register()
399 dvb_net_init(&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx); in budget_register()
404 static void budget_unregister(struct budget *budget) in budget_unregister() argument
406 struct dvb_demux *dvbdemux = &budget->demux; in budget_unregister()
408 dprintk(2, "budget: %p\n", budget); in budget_unregister()
410 dvb_net_release(&budget->dvb_net); in budget_unregister()
413 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->hw_frontend); in budget_unregister()
414 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->mem_frontend); in budget_unregister()
416 dvb_dmxdev_release(&budget->dmxdev); in budget_unregister()
417 dvb_dmx_release(&budget->demux); in budget_unregister()
420 int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, in ttpci_budget_init() argument
429 memset(budget, 0, sizeof(struct budget)); in ttpci_budget_init()
431 dprintk(2, "dev: %p, budget: %p\n", dev, budget); in ttpci_budget_init()
433 budget->card = bi; in ttpci_budget_init()
434 budget->dev = (struct saa7146_dev *) dev; in ttpci_budget_init()
436 switch(budget->card->type) { in ttpci_budget_init()
438 budget->buffer_width = TS_WIDTH_ACTIVY; in ttpci_budget_init()
450 budget->buffer_width = TS_WIDTH_DVBC; in ttpci_budget_init()
456 budget->buffer_width = TS_WIDTH; in ttpci_budget_init()
466 budget->buffer_height = dma_buffer_size * 1024 / budget->buffer_width; in ttpci_budget_init()
467 if (budget->buffer_height > 0xfff) { in ttpci_budget_init()
468 budget->buffer_height /= 2; in ttpci_budget_init()
469 budget->buffer_height &= height_mask; in ttpci_budget_init()
470 budget->buffer_size = 2 * budget->buffer_height * budget->buffer_width; in ttpci_budget_init()
472 budget->buffer_height &= height_mask; in ttpci_budget_init()
473 budget->buffer_size = budget->buffer_height * budget->buffer_width; in ttpci_budget_init()
475 budget->buffer_warning_threshold = budget->buffer_size * 80/100; in ttpci_budget_init()
476 budget->buffer_warnings = 0; in ttpci_budget_init()
477 budget->buffer_warning_time = jiffies; in ttpci_budget_init()
480 budget->dev->name, in ttpci_budget_init()
481 budget->buffer_size > budget->buffer_width * budget->buffer_height ? "odd/even" : "single", in ttpci_budget_init()
482 budget->buffer_width, budget->buffer_height); in ttpci_budget_init()
483 printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size); in ttpci_budget_init()
485 ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name, in ttpci_budget_init()
486 owner, &budget->dev->pci->dev, adapter_nums); in ttpci_budget_init()
498 budget->video_port = BUDGET_VIDEO_PORTB; in ttpci_budget_init()
500 budget->video_port = BUDGET_VIDEO_PORTA; in ttpci_budget_init()
501 spin_lock_init(&budget->feedlock); in ttpci_budget_init()
502 spin_lock_init(&budget->debilock); in ttpci_budget_init()
509 strlcpy(budget->i2c_adap.name, budget->card->name, sizeof(budget->i2c_adap.name)); in ttpci_budget_init()
511 saa7146_i2c_adapter_prepare(dev, &budget->i2c_adap, SAA7146_I2C_BUS_BIT_RATE_120); in ttpci_budget_init()
512 strcpy(budget->i2c_adap.name, budget->card->name); in ttpci_budget_init()
514 if (i2c_add_adapter(&budget->i2c_adap) < 0) { in ttpci_budget_init()
519 ttpci_eeprom_parse_mac(&budget->i2c_adap, budget->dvb_adapter.proposed_mac); in ttpci_budget_init()
521 budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci, budget->buffer_size, &budget->pt); in ttpci_budget_init()
522 if (NULL == budget->grabbing) { in ttpci_budget_init()
531 tasklet_init(&budget->vpe_tasklet, vpeirq, (unsigned long) budget); in ttpci_budget_init()
537 if ((ret = budget_register(budget)) == 0) in ttpci_budget_init()
541 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt); in ttpci_budget_init()
544 i2c_del_adapter(&budget->i2c_adap); in ttpci_budget_init()
547 dvb_unregister_adapter(&budget->dvb_adapter); in ttpci_budget_init()
552 void ttpci_budget_init_hooks(struct budget *budget) in ttpci_budget_init_hooks() argument
554 if (budget->dvb_frontend && !budget->read_fe_status) { in ttpci_budget_init_hooks()
555 budget->read_fe_status = budget->dvb_frontend->ops.read_status; in ttpci_budget_init_hooks()
556 budget->dvb_frontend->ops.read_status = budget_read_fe_status; in ttpci_budget_init_hooks()
560 int ttpci_budget_deinit(struct budget *budget) in ttpci_budget_deinit() argument
562 struct saa7146_dev *dev = budget->dev; in ttpci_budget_deinit()
564 dprintk(2, "budget: %p\n", budget); in ttpci_budget_deinit()
566 budget_unregister(budget); in ttpci_budget_deinit()
568 tasklet_kill(&budget->vpe_tasklet); in ttpci_budget_deinit()
570 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt); in ttpci_budget_deinit()
572 i2c_del_adapter(&budget->i2c_adap); in ttpci_budget_deinit()
574 dvb_unregister_adapter(&budget->dvb_adapter); in ttpci_budget_deinit()
581 struct budget *budget = (struct budget *) dev->ext_priv; in ttpci_budget_irq10_handler() local
583 dprintk(8, "dev: %p, budget: %p\n", dev, budget); in ttpci_budget_irq10_handler()
586 tasklet_schedule(&budget->vpe_tasklet); in ttpci_budget_irq10_handler()
591 struct budget *budget = (struct budget *) dev->ext_priv; in ttpci_budget_set_video_port() local
593 spin_lock(&budget->feedlock); in ttpci_budget_set_video_port()
594 budget->video_port = video_port; in ttpci_budget_set_video_port()
595 if (budget->feeding) { in ttpci_budget_set_video_port()
596 stop_ts_capture(budget); in ttpci_budget_set_video_port()
597 start_ts_capture(budget); in ttpci_budget_set_video_port()
599 spin_unlock(&budget->feedlock); in ttpci_budget_set_video_port()