• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/media/dvb/ttpci/

Lines Matching refs:budget

2  * budget-core.c: driver for the SAA7146 based Budget DVB cards
39 #include "budget.h"
58 MODULE_PARM_DESC(debug, "Turn on/off budget debugging (default:off).");
62 * TT budget / WinTV Nova
65 static int stop_ts_capture(struct budget *budget)
67 dprintk(2, "budget: %p\n", budget);
69 saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off
70 SAA7146_IER_DISABLE(budget->dev, MASK_10);
74 static int start_ts_capture(struct budget *budget)
76 struct saa7146_dev *dev = budget->dev;
78 dprintk(2, "budget: %p\n", budget);
80 if (!budget->feeding || !budget->fe_synced)
85 memset(budget->grabbing, 0x00, budget->buffer_size);
89 budget->ttbp = 0;
101 switch(budget->card->type) {
115 if (budget->video_port == BUDGET_VIDEO_PORTA) {
126 if (budget->video_port == BUDGET_VIDEO_PORTA) {
141 if (budget->buffer_size > budget->buffer_height * budget->buffer_width) {
143 saa7146_write(dev, BASE_EVEN3, budget->buffer_height * budget->buffer_width);
148 saa7146_write(dev, PROT_ADDR3, budget->buffer_size);
149 saa7146_write(dev, BASE_PAGE3, budget->pt.dma | ME1 | 0x90);
151 saa7146_write(dev, PITCH3, budget->buffer_width);
153 (budget->buffer_height << 16) | budget->buffer_width);
157 SAA7146_ISR_CLEAR(budget->dev, MASK_10); /* VPE */
158 SAA7146_IER_ENABLE(budget->dev, MASK_10); /* VPE */
166 struct budget *budget = (struct budget *) fe->dvb->priv;
170 if (budget->read_fe_status)
171 ret = budget->read_fe_status(fe, status);
177 if (synced != budget->fe_synced) {
178 budget->fe_synced = synced;
179 spin_lock(&budget->feedlock);
181 start_ts_capture(budget);
183 stop_ts_capture(budget);
184 spin_unlock(&budget->feedlock);
192 struct budget *budget = (struct budget *) data;
193 u8 *mem = (u8 *) (budget->grabbing);
194 u32 olddma = budget->ttbp;
195 u32 newdma = saa7146_read(budget->dev, PCI_VDP3);
199 pci_dma_sync_sg_for_cpu(budget->dev->pci, budget->pt.slist, budget->pt.nents, PCI_DMA_FROMDEVICE);
204 if (newdma >= budget->buffer_size)
207 budget->ttbp = newdma;
209 if (budget->feeding == 0 || newdma == olddma)
214 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188);
216 count = budget->buffer_size - olddma;
217 dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, count / 188);
219 dvb_dmx_swfilter_packets(&budget->demux, mem, newdma / 188);
222 if (count > budget->buffer_warning_threshold)
223 budget->buffer_warnings++;
225 if (budget->buffer_warnings && time_after(jiffies, budget->buffer_warning_time)) {
227 budget->dev->name, __FUNCTION__, budget->buffer_warnings, count);
228 budget->buffer_warning_time = jiffies + BUFFER_WARNING_WAIT;
229 budget->buffer_warnings = 0;
234 int ttpci_budget_debiread(struct budget *budget, u32 config, int addr, int count,
237 struct saa7146_dev *saa = budget->dev;
245 spin_lock_irqsave(&budget->debilock, flags);
249 spin_unlock_irqrestore(&budget->debilock, flags);
260 spin_unlock_irqrestore(&budget->debilock, flags);
268 spin_unlock_irqrestore(&budget->debilock, flags);
273 int ttpci_budget_debiwrite(struct budget *budget, u32 config, int addr,
276 struct saa7146_dev *saa = budget->dev;
284 spin_lock_irqsave(&budget->debilock, flags);
288 spin_unlock_irqrestore(&budget->debilock, flags);
300 spin_unlock_irqrestore(&budget->debilock, flags);
305 spin_unlock_irqrestore(&budget->debilock, flags);
317 struct budget *budget = (struct budget *) demux->priv;
320 dprintk(2, "budget: %p\n", budget);
325 spin_lock(&budget->feedlock);
327 if (budget->feeding++ == 0)
328 status = start_ts_capture(budget);
329 spin_unlock(&budget->feedlock);
336 struct budget *budget = (struct budget *) demux->priv;
339 dprintk(2, "budget: %p\n", budget);
341 spin_lock(&budget->feedlock);
342 if (--budget->feeding == 0)
343 status = stop_ts_capture(budget);
344 spin_unlock(&budget->feedlock);
348 static int budget_register(struct budget *budget)
350 struct dvb_demux *dvbdemux = &budget->demux;
353 dprintk(2, "budget: %p\n", budget);
355 dvbdemux->priv = (void *) budget;
366 dvb_dmx_init(&budget->demux);
368 budget->dmxdev.filternum = 256;
369 budget->dmxdev.demux = &dvbdemux->dmx;
370 budget->dmxdev.capabilities = 0;
372 dvb_dmxdev_init(&budget->dmxdev, &budget->dvb_adapter);
374 budget->hw_frontend.source = DMX_FRONTEND_0;
376 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend);
381 budget->mem_frontend.source = DMX_MEMORY_FE;
382 ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->mem_frontend);
386 ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &budget->hw_frontend);
390 dvb_net_init(&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx);
395 static void budget_unregister(struct budget *budget)
397 struct dvb_demux *dvbdemux = &budget->demux;
399 dprintk(2, "budget: %p\n", budget);
401 dvb_net_release(&budget->dvb_net);
404 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->hw_frontend);
405 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->mem_frontend);
407 dvb_dmxdev_release(&budget->dmxdev);
408 dvb_dmx_release(&budget->demux);
411 int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev,
420 memset(budget, 0, sizeof(struct budget));
422 dprintk(2, "dev: %p, budget: %p\n", dev, budget);
424 budget->card = bi;
425 budget->dev = (struct saa7146_dev *) dev;
427 switch(budget->card->type) {
429 budget->buffer_width = TS_WIDTH_ACTIVY;
440 budget->buffer_width = TS_WIDTH_DVBC;
446 budget->buffer_width = TS_WIDTH;
456 budget->buffer_height = dma_buffer_size * 1024 / budget->buffer_width;
457 if (budget->buffer_height > 0xfff) {
458 budget->buffer_height /= 2;
459 budget->buffer_height &= height_mask;
460 budget->buffer_size = 2 * budget->buffer_height * budget->buffer_width;
462 budget->buffer_height &= height_mask;
463 budget->buffer_size = budget->buffer_height * budget->buffer_width;
465 budget->buffer_warning_threshold = budget->buffer_size * 80/100;
466 budget->buffer_warnings = 0;
467 budget->buffer_warning_time = jiffies;
470 budget->dev->name,
471 budget->buffer_size > budget->buffer_width * budget->buffer_height ? "odd/even" : "single",
472 budget->buffer_width, budget->buffer_height);
473 printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size);
475 if ((ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name, owner, &budget->dev->pci->dev)) < 0) {
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);
499 budget->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL;
501 budget->i2c_adap.class = I2C_CLASS_TV_DIGITAL;
504 strlcpy(budget->i2c_adap.name, budget->card->name, sizeof(budget->i2c_adap.name));
506 saa7146_i2c_adapter_prepare(dev, &budget->i2c_adap, SAA7146_I2C_BUS_BIT_RATE_120);
507 strcpy(budget->i2c_adap.name, budget->card->name);
509 if (i2c_add_adapter(&budget->i2c_adap) < 0) {
514 ttpci_eeprom_parse_mac(&budget->i2c_adap, budget->dvb_adapter.proposed_mac);
516 budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci, budget->buffer_size, &budget->pt);
517 if (NULL == budget->grabbing) {
526 tasklet_init(&budget->vpe_tasklet, vpeirq, (unsigned long) budget);
532 if ((ret = budget_register(budget)) == 0)
536 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt);
539 i2c_del_adapter(&budget->i2c_adap);
542 dvb_unregister_adapter(&budget->dvb_adapter);
547 void ttpci_budget_init_hooks(struct budget *budget)
549 if (budget->dvb_frontend && !budget->read_fe_status) {
550 budget->read_fe_status = budget->dvb_frontend->ops.read_status;
551 budget->dvb_frontend->ops.read_status = budget_read_fe_status;
555 int ttpci_budget_deinit(struct budget *budget)
557 struct saa7146_dev *dev = budget->dev;
559 dprintk(2, "budget: %p\n", budget);
561 budget_unregister(budget);
563 tasklet_kill(&budget->vpe_tasklet);
565 saa7146_vfree_destroy_pgtable(dev->pci, budget->grabbing, &budget->pt);
567 i2c_del_adapter(&budget->i2c_adap);
569 dvb_unregister_adapter(&budget->dvb_adapter);
576 struct budget *budget = (struct budget *) dev->ext_priv;
578 dprintk(8, "dev: %p, budget: %p\n", dev, budget);
581 tasklet_schedule(&budget->vpe_tasklet);
586 struct budget *budget = (struct budget *) dev->ext_priv;
588 spin_lock(&budget->feedlock);
589 budget->video_port = video_port;
590 if (budget->feeding) {
591 stop_ts_capture(budget);
592 start_ts_capture(budget);
594 spin_unlock(&budget->feedlock);