• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/media/dvb/ttpci/

Lines Matching defs:budget

2  * budget-core.c: driver for the SAA7146 based Budget DVB cards
38 #include "budget.h"
57 MODULE_PARM_DESC(debug, "Turn on/off budget debugging (default:off).");
61 * TT budget / WinTV Nova
64 static int stop_ts_capture(struct budget *budget)
66 dprintk(2, "budget: %p\n", budget);
68 saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off
69 SAA7146_IER_DISABLE(budget->dev, MASK_10);
73 static int start_ts_capture(struct budget *budget)
75 struct saa7146_dev *dev = budget->dev;
77 dprintk(2, "budget: %p\n", budget);
79 if (!budget->feeding || !budget->fe_synced)
84 memset(budget->grabbing, 0x00, budget->buffer_size);
88 budget->ttbp = 0;
100 switch(budget->card->type) {
114 if (budget->video_port == BUDGET_VIDEO_PORTA) {
125 if (budget->video_port == BUDGET_VIDEO_PORTA) {
140 if (budget->buffer_size > budget->buffer_height * budget->buffer_width) {
142 saa7146_write(dev, BASE_EVEN3, budget->buffer_height * budget->buffer_width);
147 saa7146_write(dev, PROT_ADDR3, budget->buffer_size);
148 saa7146_write(dev, BASE_PAGE3, budget->pt.dma | ME1 | 0x90);
150 saa7146_write(dev, PITCH3, budget->buffer_width);
152 (budget->buffer_height << 16) | budget->buffer_width);
156 SAA7146_ISR_CLEAR(budget->dev, MASK_10); /* VPE */
157 SAA7146_IER_ENABLE(budget->dev, MASK_10); /* VPE */
165 struct budget *budget = (struct budget *) fe->dvb->priv;
169 if (budget->read_fe_status)
170 ret = budget->read_fe_status(fe, status);
176 if (synced != budget->fe_synced) {
177 budget->fe_synced = synced;
178 spin_lock(&budget->feedlock);
180 start_ts_capture(budget);
182 stop_ts_capture(budget);
183 spin_unlock(&budget->feedlock);
191 struct budget *budget = (struct budget *) data;
192 u8 *mem = (u8 *) (budget->grabbing);
193 u32 olddma = budget->ttbp;
194 u32 newdma = saa7146_read(budget->dev, PCI_VDP3);
198 pci_dma_sync_sg_for_cpu(budget->dev->pci, budget->pt.slist, budget->pt.nents, PCI_DMA_FROMDEVICE);
203 if (newdma >= budget->buffer_size)
206 budget->ttbp = newdma;
208 if (budget->feeding == 0 || newdma == olddma)
213 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188);
215 count = budget->buffer_size - olddma;
216 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188);
218 dvb_dmx_swfilter_packets(&budget->demux, mem, newdma / 188);
221 if (count > budget->buffer_warning_threshold)
222 budget->buffer_warnings++;
224 if (budget->buffer_warnings && time_after(jiffies, budget->buffer_warning_time)) {
226 budget->dev->name, __func__, budget->buffer_warnings, count);
227 budget->buffer_warning_time = jiffies + BUFFER_WARNING_WAIT;
228 budget->buffer_warnings = 0;
233 int ttpci_budget_debiread(struct budget *budget, u32 config, int addr, int count,
236 struct saa7146_dev *saa = budget->dev;
244 spin_lock_irqsave(&budget->debilock, flags);
248 spin_unlock_irqrestore(&budget->debilock, flags);
259 spin_unlock_irqrestore(&budget->debilock, flags);
267 spin_unlock_irqrestore(&budget->debilock, flags);
272 int ttpci_budget_debiwrite(struct budget *budget, u32 config, int addr,
275 struct saa7146_dev *saa = budget->dev;
283 spin_lock_irqsave(&budget->debilock, flags);
287 spin_unlock_irqrestore(&budget->debilock, flags);
299 spin_unlock_irqrestore(&budget->debilock, flags);
304 spin_unlock_irqrestore(&budget->debilock, flags);
316 struct budget *budget = (struct budget *) demux->priv;
319 dprintk(2, "budget: %p\n", budget);
324 spin_lock(&budget->feedlock);
326 if (budget->feeding++ == 0)
327 status = start_ts_capture(budget);
328 spin_unlock(&budget->feedlock);
335 struct budget *budget = (struct budget *) demux->priv;
338 dprintk(2, "budget: %p\n", budget);
340 spin_lock(&budget->feedlock);
341 if (--budget->feeding == 0)
342 status = stop_ts_capture(budget);
343 spin_unlock(&budget->feedlock);
347 static int budget_register(struct budget *budget)
349 struct dvb_demux *dvbdemux = &budget->demux;
352 dprintk(2, "budget: %p\n", budget);
354 dvbdemux->priv = (void *) budget;
365 dvb_dmx_init(&budget->demux);
367 budget->dmxdev.filternum = 256;
368 budget->dmxdev.demux = &dvbdemux->dmx;
369 budget->dmxdev.capabilities = 0;
371 dvb_dmxdev_init(&budget->dmxdev, &budget->dvb_adapter);
373 budget->hw_frontend.source = DMX_FRONTEND_0;
375 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend);
380 budget->mem_frontend.source = DMX_MEMORY_FE;
381 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->mem_frontend);
385 ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &budget->hw_frontend);
389 dvb_net_init(&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx);
394 static void budget_unregister(struct budget *budget)
396 struct dvb_demux *dvbdemux = &budget->demux;
398 dprintk(2, "budget: %p\n", budget);
400 dvb_net_release(&budget->dvb_net);
403 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->hw_frontend);
404 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->mem_frontend);
406 dvb_dmxdev_release(&budget->dmxdev);
407 dvb_dmx_release(&budget->demux);
410 int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev,
419 memset(budget, 0, sizeof(struct budget));
421 dprintk(2, "dev: %p, budget: %p\n", dev, budget);
423 budget->card = bi;
424 budget->dev = (struct saa7146_dev *) dev;
426 switch(budget->card->type) {
428 budget->buffer_width = TS_WIDTH_ACTIVY;
439 budget->buffer_width = TS_WIDTH_DVBC;
445 budget->buffer_width = TS_WIDTH;
455 budget->buffer_height = dma_buffer_size * 1024 / budget->buffer_width;
456 if (budget->buffer_height > 0xfff) {
457 budget->buffer_height /= 2;
458 budget->buffer_height &= height_mask;
459 budget->buffer_size = 2 * budget->buffer_height * budget->buffer_width;
461 budget->buffer_height &= height_mask;
462 budget->buffer_size = budget->buffer_height * budget->buffer_width;
464 budget->buffer_warning_threshold = budget->buffer_size * 80/100;
465 budget->buffer_warnings = 0;
466 budget->buffer_warning_time = jiffies;
469 budget->dev->name,
470 budget->buffer_size > budget->buffer_width * budget->buffer_height ? "odd/even" : "single",
471 budget->buffer_width, budget->buffer_height);
472 printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size);
474 ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name,
475 owner, &budget->dev->pci->dev, adapter_nums);
487 budget->video_port = BUDGET_VIDEO_PORTB;
489 budget->video_port = BUDGET_VIDEO_PORTA;
490 spin_lock_init(&budget->feedlock);
491 spin_lock_init(&budget->debilock);
498 budget->i2c_adap.class = I2C_CLASS_TV_DIGITAL;
500 strlcpy(budget->i2c_adap.name, budget->card->name, sizeof(budget->i2c_adap.name));
502 saa7146_i2c_adapter_prepare(dev, &budget->i2c_adap, SAA7146_I2C_BUS_BIT_RATE_120);
503 strcpy(budget->i2c_adap.name, budget->card->name);
505 if (i2c_add_adapter(&budget->i2c_adap) < 0) {
510 ttpci_eeprom_parse_mac(&budget->i2c_adap, budget->dvb_adapter.proposed_mac);
512 budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci, budget->buffer_size, &budget->pt);
513 if (NULL == budget->grabbing) {
522 tasklet_init(&budget->vpe_tasklet, vpeirq, (unsigned long) budget);
528 if ((ret = budget_register(budget)) == 0)
532 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt);
535 i2c_del_adapter(&budget->i2c_adap);
538 dvb_unregister_adapter(&budget->dvb_adapter);
543 void ttpci_budget_init_hooks(struct budget *budget)
545 if (budget->dvb_frontend && !budget->read_fe_status) {
546 budget->read_fe_status = budget->dvb_frontend->ops.read_status;
547 budget->dvb_frontend->ops.read_status = budget_read_fe_status;
551 int ttpci_budget_deinit(struct budget *budget)
553 struct saa7146_dev *dev = budget->dev;
555 dprintk(2, "budget: %p\n", budget);
557 budget_unregister(budget);
559 tasklet_kill(&budget->vpe_tasklet);
561 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt);
563 i2c_del_adapter(&budget->i2c_adap);
565 dvb_unregister_adapter(&budget->dvb_adapter);
572 struct budget *budget = (struct budget *) dev->ext_priv;
574 dprintk(8, "dev: %p, budget: %p\n", dev, budget);
577 tasklet_schedule(&budget->vpe_tasklet);
582 struct budget *budget = (struct budget *) dev->ext_priv;
584 spin_lock(&budget->feedlock);
585 budget->video_port = video_port;
586 if (budget->feeding) {
587 stop_ts_capture(budget);
588 start_ts_capture(budget);
590 spin_unlock(&budget->feedlock);