Lines Matching refs:chan

92 	struct ngene_channel *chan = (struct ngene_channel *)data;  in demux_tasklet()  local
93 struct SBufferHeader *Cur = chan->nextBuffer; in demux_tasklet()
95 spin_lock_irq(&chan->state_lock); in demux_tasklet()
98 if (chan->mode & NGENE_IO_TSOUT) { in demux_tasklet()
99 u32 Flags = chan->DataFormatFlags; in demux_tasklet()
102 if (chan->pBufferExchange) { in demux_tasklet()
103 if (!chan->pBufferExchange(chan, in demux_tasklet()
105 chan->Capture1Length, in demux_tasklet()
119 if (chan->HWState == HWSTATE_RUN) { in demux_tasklet()
128 chan->HWState = HWSTATE_RUN; in demux_tasklet()
132 if (chan->HWState == HWSTATE_RUN) { in demux_tasklet()
137 if (chan->AudioDTOUpdated) { in demux_tasklet()
140 chan->AudioDTOValue); in demux_tasklet()
142 chan->AudioDTOValue; in demux_tasklet()
143 chan->AudioDTOUpdated = 0; in demux_tasklet()
146 if (chan->HWState == HWSTATE_RUN) { in demux_tasklet()
147 u32 Flags = chan->DataFormatFlags; in demux_tasklet()
148 IBufferExchange *exch1 = chan->pBufferExchange; in demux_tasklet()
149 IBufferExchange *exch2 = chan->pBufferExchange2; in demux_tasklet()
154 spin_unlock_irq(&chan->state_lock); in demux_tasklet()
156 exch1(chan, Cur->Buffer1, in demux_tasklet()
157 chan->Capture1Length, in demux_tasklet()
161 exch2(chan, Cur->Buffer2, in demux_tasklet()
162 chan->Capture2Length, in demux_tasklet()
165 spin_lock_irq(&chan->state_lock); in demux_tasklet()
166 } else if (chan->HWState != HWSTATE_STOP) in demux_tasklet()
167 chan->HWState = HWSTATE_RUN; in demux_tasklet()
172 chan->nextBuffer = Cur; in demux_tasklet()
174 spin_unlock_irq(&chan->state_lock); in demux_tasklet()
514 static void flush_buffers(struct ngene_channel *chan) in flush_buffers() argument
520 spin_lock_irq(&chan->state_lock); in flush_buffers()
521 val = chan->nextBuffer->ngeneBuffer.SR.Flags & 0x80; in flush_buffers()
522 spin_unlock_irq(&chan->state_lock); in flush_buffers()
526 static void clear_buffers(struct ngene_channel *chan) in clear_buffers() argument
528 struct SBufferHeader *Cur = chan->nextBuffer; in clear_buffers()
532 if (chan->mode & NGENE_IO_TSOUT) in clear_buffers()
534 chan->Capture1Length, in clear_buffers()
535 chan->DataFormatFlags); in clear_buffers()
537 } while (Cur != chan->nextBuffer); in clear_buffers()
539 if (chan->mode & NGENE_IO_TSOUT) { in clear_buffers()
540 chan->nextBuffer->ngeneBuffer.SR.DTOUpdate = in clear_buffers()
541 chan->AudioDTOValue; in clear_buffers()
542 chan->AudioDTOUpdated = 0; in clear_buffers()
544 Cur = chan->TSIdleBuffer.Head; in clear_buffers()
550 chan->Capture1Length, in clear_buffers()
551 chan->DataFormatFlags); in clear_buffers()
553 } while (Cur != chan->TSIdleBuffer.Head); in clear_buffers()
560 struct ngene_channel *chan = &dev->channel[stream]; in ngene_command_stream_control() local
572 if (chan->mode & NGENE_IO_TSOUT) in ngene_command_stream_control()
585 chan->Mode = mode; in ngene_command_stream_control()
588 spin_lock_irq(&chan->state_lock); in ngene_command_stream_control()
589 if (chan->State == KSSTATE_RUN) { in ngene_command_stream_control()
590 chan->State = KSSTATE_ACQUIRE; in ngene_command_stream_control()
591 chan->HWState = HWSTATE_STOP; in ngene_command_stream_control()
592 spin_unlock_irq(&chan->state_lock); in ngene_command_stream_control()
598 flush_buffers(chan); in ngene_command_stream_control()
602 spin_unlock_irq(&chan->state_lock); in ngene_command_stream_control()
609 chan->Capture1Length / AUDIO_BLOCK_SIZE; in ngene_command_stream_control()
610 com.cmd.StreamControl.Buffer_Address = chan->RingBuffer.PAHead; in ngene_command_stream_control()
613 chan->Capture1Length / TS_BLOCK_SIZE; in ngene_command_stream_control()
615 chan->Capture1Length / TS_BLOCK_SIZE; in ngene_command_stream_control()
617 chan->TSRingBuffer.PAHead; in ngene_command_stream_control()
618 if (chan->mode & NGENE_IO_TSOUT) { in ngene_command_stream_control()
620 chan->Capture1Length / TS_BLOCK_SIZE; in ngene_command_stream_control()
624 com.cmd.StreamControl.BytesPerVideoLine = chan->nBytesPerLine; in ngene_command_stream_control()
625 com.cmd.StreamControl.MaxLinesPerField = chan->nLines; in ngene_command_stream_control()
627 com.cmd.StreamControl.Buffer_Address = chan->RingBuffer.PAHead; in ngene_command_stream_control()
631 chan->nVBILines; in ngene_command_stream_control()
634 chan->nBytesPerVBILine; in ngene_command_stream_control()
640 spin_lock_irq(&chan->state_lock); in ngene_command_stream_control()
642 chan->nextBuffer = chan->RingBuffer.Head; in ngene_command_stream_control()
657 chan->nextBuffer = chan->TSRingBuffer.Head; in ngene_command_stream_control()
659 if (chan->mode & NGENE_IO_TSOUT) { in ngene_command_stream_control()
682 chan->nextBuffer = chan->RingBuffer.Head; in ngene_command_stream_control()
687 ITUDecoderSetup[chan->itumode], 16); in ngene_command_stream_control()
691 clear_buffers(chan); in ngene_command_stream_control()
692 chan->State = KSSTATE_RUN; in ngene_command_stream_control()
694 chan->HWState = HWSTATE_RUN; in ngene_command_stream_control()
696 chan->HWState = HWSTATE_STARTUP; in ngene_command_stream_control()
697 spin_unlock_irq(&chan->state_lock); in ngene_command_stream_control()
707 void set_transfer(struct ngene_channel *chan, int state) in set_transfer() argument
710 struct ngene *dev = chan->dev; in set_transfer()
719 if (chan->running) { in set_transfer()
724 if (!chan->running) { in set_transfer()
731 dev->card_info->switch_ctrl(chan, 1, state ^ 1); in set_transfer()
734 spin_lock_irq(&chan->state_lock); in set_transfer()
740 if (chan->mode & (NGENE_IO_TSIN | NGENE_IO_TSOUT)) { in set_transfer()
741 chan->Capture1Length = 512 * 188; in set_transfer()
744 if (chan->mode & NGENE_IO_TSOUT) { in set_transfer()
745 chan->pBufferExchange = tsout_exchange; in set_transfer()
747 chan->AudioDTOValue = 0x80000000; in set_transfer()
748 chan->AudioDTOUpdated = 1; in set_transfer()
750 if (chan->mode & NGENE_IO_TSIN) in set_transfer()
751 chan->pBufferExchange = tsin_exchange; in set_transfer()
752 spin_unlock_irq(&chan->state_lock); in set_transfer()
757 ret = ngene_command_stream_control(dev, chan->number, in set_transfer()
760 chan->running = state; in set_transfer()
765 spin_lock_irq(&chan->state_lock); in set_transfer()
766 chan->pBufferExchange = NULL; in set_transfer()
768 spin_unlock_irq(&chan->state_lock); in set_transfer()
827 struct ngene_channel *chan; in free_common_buffers() local
830 chan = &dev->channel[i]; in free_common_buffers()
831 free_idlebuffer(dev, &chan->TSIdleBuffer, &chan->TSRingBuffer); in free_common_buffers()
832 free_ringbuffer(dev, &chan->RingBuffer); in free_common_buffers()
833 free_ringbuffer(dev, &chan->TSRingBuffer); in free_common_buffers()
1417 static void release_channel(struct ngene_channel *chan) in release_channel() argument
1419 struct dvb_demux *dvbdemux = &chan->demux; in release_channel()
1420 struct ngene *dev = chan->dev; in release_channel()
1422 if (chan->running) in release_channel()
1423 set_transfer(chan, 0); in release_channel()
1425 tasklet_kill(&chan->demux_tasklet); in release_channel()
1427 if (chan->ci_dev) { in release_channel()
1428 dvb_unregister_device(chan->ci_dev); in release_channel()
1429 chan->ci_dev = NULL; in release_channel()
1432 if (chan->fe2) in release_channel()
1433 dvb_unregister_frontend(chan->fe2); in release_channel()
1435 if (chan->fe) { in release_channel()
1436 dvb_unregister_frontend(chan->fe); in release_channel()
1437 dvb_frontend_detach(chan->fe); in release_channel()
1438 chan->fe = NULL; in release_channel()
1441 if (chan->has_demux) { in release_channel()
1442 dvb_net_release(&chan->dvbnet); in release_channel()
1445 &chan->hw_frontend); in release_channel()
1447 &chan->mem_frontend); in release_channel()
1448 dvb_dmxdev_release(&chan->dmxdev); in release_channel()
1449 dvb_dmx_release(&chan->demux); in release_channel()
1450 chan->has_demux = false; in release_channel()
1453 if (chan->has_adapter) { in release_channel()
1454 dvb_unregister_adapter(&dev->adapter[chan->number]); in release_channel()
1455 chan->has_adapter = false; in release_channel()
1459 static int init_channel(struct ngene_channel *chan) in init_channel() argument
1461 int ret = 0, nr = chan->number; in init_channel()
1463 struct dvb_demux *dvbdemux = &chan->demux; in init_channel()
1464 struct ngene *dev = chan->dev; in init_channel()
1468 tasklet_init(&chan->demux_tasklet, demux_tasklet, (unsigned long)chan); in init_channel()
1469 chan->users = 0; in init_channel()
1470 chan->type = io; in init_channel()
1471 chan->mode = chan->type; /* for now only one mode */ in init_channel()
1474 chan->fe = NULL; in init_channel()
1476 ret = ni->demod_attach[nr](chan); in init_channel()
1480 if (chan->fe && ni->tuner_attach[nr]) { in init_channel()
1481 ret = ni->tuner_attach[nr](chan); in init_channel()
1492 chan->DataFormatFlags = DF_SWAP32; in init_channel()
1498 &chan->dev->pci_dev->dev, in init_channel()
1504 chan->has_adapter = true; in init_channel()
1511 set_transfer(chan, 1); in init_channel()
1512 chan->dev->channel[2].DataFormatFlags = DF_SWAP32; in init_channel()
1513 set_transfer(&chan->dev->channel[2], 1); in init_channel()
1514 dvb_register_device(adapter, &chan->ci_dev, in init_channel()
1515 &ngene_dvbdev_ci, (void *) chan, in init_channel()
1517 if (!chan->ci_dev) in init_channel()
1521 if (chan->fe) { in init_channel()
1522 if (dvb_register_frontend(adapter, chan->fe) < 0) in init_channel()
1524 chan->has_demux = true; in init_channel()
1526 if (chan->fe2) { in init_channel()
1527 if (dvb_register_frontend(adapter, chan->fe2) < 0) in init_channel()
1529 if (chan->fe) { in init_channel()
1530 chan->fe2->tuner_priv = chan->fe->tuner_priv; in init_channel()
1531 memcpy(&chan->fe2->ops.tuner_ops, in init_channel()
1532 &chan->fe->ops.tuner_ops, in init_channel()
1537 if (chan->has_demux) { in init_channel()
1540 ngene_stop_feed, chan); in init_channel()
1541 ret = my_dvb_dmxdev_ts_card_init(&chan->dmxdev, &chan->demux, in init_channel()
1542 &chan->hw_frontend, in init_channel()
1543 &chan->mem_frontend, adapter); in init_channel()
1544 ret = dvb_net_init(adapter, &chan->dvbnet, &chan->demux.dmx); in init_channel()
1550 if (chan->fe) { in init_channel()
1551 dvb_frontend_detach(chan->fe); in init_channel()
1552 chan->fe = NULL; in init_channel()
1554 release_channel(chan); in init_channel()