Lines Matching refs:port

267 static void smi_port_disableInterrupt(struct smi_port *port)  in smi_port_disableInterrupt()  argument
269 struct smi_dev *dev = port->dev; in smi_port_disableInterrupt()
272 (port->_dmaInterruptCH0 | port->_dmaInterruptCH1)); in smi_port_disableInterrupt()
275 static void smi_port_enableInterrupt(struct smi_port *port) in smi_port_enableInterrupt() argument
277 struct smi_dev *dev = port->dev; in smi_port_enableInterrupt()
280 (port->_dmaInterruptCH0 | port->_dmaInterruptCH1)); in smi_port_enableInterrupt()
283 static void smi_port_clearInterrupt(struct smi_port *port) in smi_port_clearInterrupt() argument
285 struct smi_dev *dev = port->dev; in smi_port_clearInterrupt()
288 (port->_dmaInterruptCH0 | port->_dmaInterruptCH1)); in smi_port_clearInterrupt()
294 struct smi_port *port = (struct smi_port *) data; in smi_dma_xfer() local
295 struct smi_dev *dev = port->dev; in smi_dma_xfer()
299 intr_status = port->_int_status; in smi_dma_xfer()
300 dmaManagement = smi_read(port->DMA_MANAGEMENT); in smi_dma_xfer()
305 if ((intr_status & port->_dmaInterruptCH0) && (dmaChan0State == 0x01)) { in smi_dma_xfer()
308 port->idx); in smi_dma_xfer()
309 finishedData = smi_read(port->DMA_CHAN0_TRANS_STATE); in smi_dma_xfer()
322 dvb_dmx_swfilter_packets(&port->demux, in smi_dma_xfer()
323 port->cpu_addr[0], (finishedData / 188)); in smi_dma_xfer()
328 if ((intr_status & port->_dmaInterruptCH1) && (dmaChan1State == 0x01)) { in smi_dma_xfer()
331 port->idx); in smi_dma_xfer()
332 finishedData = smi_read(port->DMA_CHAN1_TRANS_STATE); in smi_dma_xfer()
345 dvb_dmx_swfilter_packets(&port->demux, in smi_dma_xfer()
346 port->cpu_addr[1], (finishedData / 188)); in smi_dma_xfer()
351 if (intr_status & port->_dmaInterruptCH0) in smi_dma_xfer()
353 if (intr_status & port->_dmaInterruptCH1) in smi_dma_xfer()
355 smi_write(port->DMA_MANAGEMENT, dmaManagement); in smi_dma_xfer()
357 smi_port_enableInterrupt(port); in smi_dma_xfer()
360 static void smi_port_dma_free(struct smi_port *port) in smi_port_dma_free() argument
362 if (port->cpu_addr[0]) { in smi_port_dma_free()
363 pci_free_consistent(port->dev->pci_dev, SMI_TS_DMA_BUF_SIZE, in smi_port_dma_free()
364 port->cpu_addr[0], port->dma_addr[0]); in smi_port_dma_free()
365 port->cpu_addr[0] = NULL; in smi_port_dma_free()
367 if (port->cpu_addr[1]) { in smi_port_dma_free()
368 pci_free_consistent(port->dev->pci_dev, SMI_TS_DMA_BUF_SIZE, in smi_port_dma_free()
369 port->cpu_addr[1], port->dma_addr[1]); in smi_port_dma_free()
370 port->cpu_addr[1] = NULL; in smi_port_dma_free()
374 static int smi_port_init(struct smi_port *port, int dmaChanUsed) in smi_port_init() argument
376 dev_dbg(&port->dev->pci_dev->dev, in smi_port_init()
377 "%s, port %d, dmaused %d\n", __func__, port->idx, dmaChanUsed); in smi_port_init()
378 port->enable = 0; in smi_port_init()
379 if (port->idx == 0) { in smi_port_init()
381 port->_dmaInterruptCH0 = dmaChanUsed & 0x01; in smi_port_init()
382 port->_dmaInterruptCH1 = dmaChanUsed & 0x02; in smi_port_init()
384 port->DMA_CHAN0_ADDR_LOW = DMA_PORTA_CHAN0_ADDR_LOW; in smi_port_init()
385 port->DMA_CHAN0_ADDR_HI = DMA_PORTA_CHAN0_ADDR_HI; in smi_port_init()
386 port->DMA_CHAN0_TRANS_STATE = DMA_PORTA_CHAN0_TRANS_STATE; in smi_port_init()
387 port->DMA_CHAN0_CONTROL = DMA_PORTA_CHAN0_CONTROL; in smi_port_init()
388 port->DMA_CHAN1_ADDR_LOW = DMA_PORTA_CHAN1_ADDR_LOW; in smi_port_init()
389 port->DMA_CHAN1_ADDR_HI = DMA_PORTA_CHAN1_ADDR_HI; in smi_port_init()
390 port->DMA_CHAN1_TRANS_STATE = DMA_PORTA_CHAN1_TRANS_STATE; in smi_port_init()
391 port->DMA_CHAN1_CONTROL = DMA_PORTA_CHAN1_CONTROL; in smi_port_init()
392 port->DMA_MANAGEMENT = DMA_PORTA_MANAGEMENT; in smi_port_init()
395 port->_dmaInterruptCH0 = (dmaChanUsed << 2) & 0x04; in smi_port_init()
396 port->_dmaInterruptCH1 = (dmaChanUsed << 2) & 0x08; in smi_port_init()
398 port->DMA_CHAN0_ADDR_LOW = DMA_PORTB_CHAN0_ADDR_LOW; in smi_port_init()
399 port->DMA_CHAN0_ADDR_HI = DMA_PORTB_CHAN0_ADDR_HI; in smi_port_init()
400 port->DMA_CHAN0_TRANS_STATE = DMA_PORTB_CHAN0_TRANS_STATE; in smi_port_init()
401 port->DMA_CHAN0_CONTROL = DMA_PORTB_CHAN0_CONTROL; in smi_port_init()
402 port->DMA_CHAN1_ADDR_LOW = DMA_PORTB_CHAN1_ADDR_LOW; in smi_port_init()
403 port->DMA_CHAN1_ADDR_HI = DMA_PORTB_CHAN1_ADDR_HI; in smi_port_init()
404 port->DMA_CHAN1_TRANS_STATE = DMA_PORTB_CHAN1_TRANS_STATE; in smi_port_init()
405 port->DMA_CHAN1_CONTROL = DMA_PORTB_CHAN1_CONTROL; in smi_port_init()
406 port->DMA_MANAGEMENT = DMA_PORTB_MANAGEMENT; in smi_port_init()
409 if (port->_dmaInterruptCH0) { in smi_port_init()
410 port->cpu_addr[0] = pci_alloc_consistent(port->dev->pci_dev, in smi_port_init()
412 &port->dma_addr[0]); in smi_port_init()
413 if (!port->cpu_addr[0]) { in smi_port_init()
414 dev_err(&port->dev->pci_dev->dev, in smi_port_init()
416 port->idx); in smi_port_init()
421 if (port->_dmaInterruptCH1) { in smi_port_init()
422 port->cpu_addr[1] = pci_alloc_consistent(port->dev->pci_dev, in smi_port_init()
424 &port->dma_addr[1]); in smi_port_init()
425 if (!port->cpu_addr[1]) { in smi_port_init()
426 dev_err(&port->dev->pci_dev->dev, in smi_port_init()
428 port->idx); in smi_port_init()
433 smi_port_disableInterrupt(port); in smi_port_init()
434 tasklet_init(&port->tasklet, smi_dma_xfer, (unsigned long)port); in smi_port_init()
435 tasklet_disable(&port->tasklet); in smi_port_init()
436 port->enable = 1; in smi_port_init()
439 smi_port_dma_free(port); in smi_port_init()
443 static void smi_port_exit(struct smi_port *port) in smi_port_exit() argument
445 smi_port_disableInterrupt(port); in smi_port_exit()
446 tasklet_kill(&port->tasklet); in smi_port_exit()
447 smi_port_dma_free(port); in smi_port_exit()
448 port->enable = 0; in smi_port_exit()
451 static int smi_port_irq(struct smi_port *port, u32 int_status) in smi_port_irq() argument
453 u32 port_req_irq = port->_dmaInterruptCH0 | port->_dmaInterruptCH1; in smi_port_irq()
457 smi_port_disableInterrupt(port); in smi_port_irq()
458 port->_int_status = int_status; in smi_port_irq()
459 smi_port_clearInterrupt(port); in smi_port_irq()
460 tasklet_schedule(&port->tasklet); in smi_port_irq()
530 static int smi_dvbsky_m88ds3103_fe_attach(struct smi_port *port) in smi_dvbsky_m88ds3103_fe_attach() argument
533 struct smi_dev *dev = port->dev; in smi_dvbsky_m88ds3103_fe_attach()
541 i2c = (port->idx == 0) ? &dev->i2c_bus[0] : &dev->i2c_bus[1]; in smi_dvbsky_m88ds3103_fe_attach()
544 port->fe = dvb_attach(m88ds3103_attach, in smi_dvbsky_m88ds3103_fe_attach()
546 if (!port->fe) { in smi_dvbsky_m88ds3103_fe_attach()
551 ts2020_config.fe = port->fe; in smi_dvbsky_m88ds3103_fe_attach()
562 port->fe->ops.read_signal_strength = in smi_dvbsky_m88ds3103_fe_attach()
563 port->fe->ops.tuner_ops.get_rf_strength; in smi_dvbsky_m88ds3103_fe_attach()
565 port->i2c_client_tuner = tuner_client; in smi_dvbsky_m88ds3103_fe_attach()
569 dvb_frontend_detach(port->fe); in smi_dvbsky_m88ds3103_fe_attach()
585 static int smi_dvbsky_m88rs6000_fe_attach(struct smi_port *port) in smi_dvbsky_m88rs6000_fe_attach() argument
588 struct smi_dev *dev = port->dev; in smi_dvbsky_m88rs6000_fe_attach()
597 i2c = (port->idx == 0) ? &dev->i2c_bus[0] : &dev->i2c_bus[1]; in smi_dvbsky_m88rs6000_fe_attach()
600 port->fe = dvb_attach(m88ds3103_attach, in smi_dvbsky_m88rs6000_fe_attach()
602 if (!port->fe) { in smi_dvbsky_m88rs6000_fe_attach()
607 m88rs6000t_config.fe = port->fe; in smi_dvbsky_m88rs6000_fe_attach()
618 port->fe->ops.read_signal_strength = in smi_dvbsky_m88rs6000_fe_attach()
619 port->fe->ops.tuner_ops.get_rf_strength; in smi_dvbsky_m88rs6000_fe_attach()
621 port->i2c_client_tuner = tuner_client; in smi_dvbsky_m88rs6000_fe_attach()
625 dvb_frontend_detach(port->fe); in smi_dvbsky_m88rs6000_fe_attach()
629 static int smi_dvbsky_sit2_fe_attach(struct smi_port *port) in smi_dvbsky_sit2_fe_attach() argument
632 struct smi_dev *dev = port->dev; in smi_dvbsky_sit2_fe_attach()
641 i2c = (port->idx == 0) ? &dev->i2c_bus[0] : &dev->i2c_bus[1]; in smi_dvbsky_sit2_fe_attach()
646 si2168_config.fe = &port->fe; in smi_dvbsky_sit2_fe_attach()
659 port->i2c_client_demod = client_demod; in smi_dvbsky_sit2_fe_attach()
663 si2157_config.fe = port->fe; in smi_dvbsky_sit2_fe_attach()
673 smi_del_i2c_client(port->i2c_client_demod); in smi_dvbsky_sit2_fe_attach()
674 port->i2c_client_demod = NULL; in smi_dvbsky_sit2_fe_attach()
678 port->i2c_client_tuner = client_tuner; in smi_dvbsky_sit2_fe_attach()
682 static int smi_fe_init(struct smi_port *port) in smi_fe_init() argument
685 struct smi_dev *dev = port->dev; in smi_fe_init()
686 struct dvb_adapter *adap = &port->dvb_adapter; in smi_fe_init()
689 dev_dbg(&port->dev->pci_dev->dev, in smi_fe_init()
691 __func__, port->idx, port->fe_type); in smi_fe_init()
692 switch (port->fe_type) { in smi_fe_init()
694 ret = smi_dvbsky_m88ds3103_fe_attach(port); in smi_fe_init()
697 ret = smi_dvbsky_m88rs6000_fe_attach(port); in smi_fe_init()
700 ret = smi_dvbsky_sit2_fe_attach(port); in smi_fe_init()
707 ret = dvb_register_frontend(adap, port->fe); in smi_fe_init()
709 if (port->i2c_client_tuner) in smi_fe_init()
710 smi_del_i2c_client(port->i2c_client_tuner); in smi_fe_init()
711 if (port->i2c_client_demod) in smi_fe_init()
712 smi_del_i2c_client(port->i2c_client_demod); in smi_fe_init()
713 dvb_frontend_detach(port->fe); in smi_fe_init()
718 dev_info(&port->dev->pci_dev->dev, in smi_fe_init()
719 "DVBSky SMI PCIe MAC= %pM\n", mac_ee + (port->idx)*8); in smi_fe_init()
720 memcpy(adap->proposed_mac, mac_ee + (port->idx)*8, 6); in smi_fe_init()
724 static void smi_fe_exit(struct smi_port *port) in smi_fe_exit() argument
726 dvb_unregister_frontend(port->fe); in smi_fe_exit()
728 if (port->i2c_client_tuner) in smi_fe_exit()
729 smi_del_i2c_client(port->i2c_client_tuner); in smi_fe_exit()
730 if (port->i2c_client_demod) in smi_fe_exit()
731 smi_del_i2c_client(port->i2c_client_demod); in smi_fe_exit()
732 dvb_frontend_detach(port->fe); in smi_fe_exit()
775 static u32 smi_config_DMA(struct smi_port *port) in smi_config_DMA() argument
777 struct smi_dev *dev = port->dev; in smi_config_DMA()
784 dmaManagement = smi_read(port->DMA_MANAGEMENT); in smi_config_DMA()
786 if (port->_dmaInterruptCH0) { in smi_config_DMA()
788 mem = port->dma_addr[0]; in smi_config_DMA()
796 smi_write(port->DMA_CHAN0_ADDR_LOW, dmaMemPtrLow); in smi_config_DMA()
797 smi_write(port->DMA_CHAN0_ADDR_HI, dmaMemPtrHi); in smi_config_DMA()
798 smi_write(port->DMA_CHAN0_CONTROL, dmaCtlReg); in smi_config_DMA()
801 if (port->_dmaInterruptCH1) { in smi_config_DMA()
803 mem = port->dma_addr[1]; in smi_config_DMA()
811 smi_write(port->DMA_CHAN1_ADDR_LOW, dmaMemPtrLow); in smi_config_DMA()
812 smi_write(port->DMA_CHAN1_ADDR_HI, dmaMemPtrHi); in smi_config_DMA()
813 smi_write(port->DMA_CHAN1_CONTROL, dmaCtlReg); in smi_config_DMA()
821 struct smi_port *port = dvbdmx->priv; in smi_start_feed() local
822 struct smi_dev *dev = port->dev; in smi_start_feed()
825 if (port->users++ == 0) { in smi_start_feed()
826 dmaManagement = smi_config_DMA(port); in smi_start_feed()
827 smi_port_clearInterrupt(port); in smi_start_feed()
828 smi_port_enableInterrupt(port); in smi_start_feed()
829 smi_write(port->DMA_MANAGEMENT, dmaManagement); in smi_start_feed()
830 tasklet_enable(&port->tasklet); in smi_start_feed()
832 return port->users; in smi_start_feed()
838 struct smi_port *port = dvbdmx->priv; in smi_stop_feed() local
839 struct smi_dev *dev = port->dev; in smi_stop_feed()
841 if (--port->users) in smi_stop_feed()
842 return port->users; in smi_stop_feed()
844 tasklet_disable(&port->tasklet); in smi_stop_feed()
845 smi_port_disableInterrupt(port); in smi_stop_feed()
846 smi_clear(port->DMA_MANAGEMENT, 0x30003); in smi_stop_feed()
850 static int smi_dvb_init(struct smi_port *port) in smi_dvb_init() argument
853 struct dvb_adapter *adap = &port->dvb_adapter; in smi_dvb_init()
854 struct dvb_demux *dvbdemux = &port->demux; in smi_dvb_init()
856 dev_dbg(&port->dev->pci_dev->dev, in smi_dvb_init()
857 "%s, port %d\n", __func__, port->idx); in smi_dvb_init()
860 &port->dev->pci_dev->dev, in smi_dvb_init()
863 dev_err(&port->dev->pci_dev->dev, "Fail to register DVB adapter.\n"); in smi_dvb_init()
868 smi_stop_feed, port); in smi_dvb_init()
872 ret = my_dvb_dmxdev_ts_card_init(&port->dmxdev, &port->demux, in smi_dvb_init()
873 &port->hw_frontend, in smi_dvb_init()
874 &port->mem_frontend, adap); in smi_dvb_init()
878 ret = dvb_net_init(adap, &port->dvbnet, port->dmxdev.demux); in smi_dvb_init()
884 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &port->hw_frontend); in smi_dvb_init()
885 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &port->mem_frontend); in smi_dvb_init()
886 dvb_dmxdev_release(&port->dmxdev); in smi_dvb_init()
888 dvb_dmx_release(&port->demux); in smi_dvb_init()
890 dvb_unregister_adapter(&port->dvb_adapter); in smi_dvb_init()
894 static void smi_dvb_exit(struct smi_port *port) in smi_dvb_exit() argument
896 struct dvb_demux *dvbdemux = &port->demux; in smi_dvb_exit()
898 dvb_net_release(&port->dvbnet); in smi_dvb_exit()
901 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &port->hw_frontend); in smi_dvb_exit()
902 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &port->mem_frontend); in smi_dvb_exit()
903 dvb_dmxdev_release(&port->dmxdev); in smi_dvb_exit()
904 dvb_dmx_release(&port->demux); in smi_dvb_exit()
906 dvb_unregister_adapter(&port->dvb_adapter); in smi_dvb_exit()
910 struct smi_port *port, int index) in smi_port_attach() argument
914 port->dev = dev; in smi_port_attach()
915 port->idx = index; in smi_port_attach()
916 port->fe_type = (index == 0) ? dev->info->fe_0 : dev->info->fe_1; in smi_port_attach()
919 ret = smi_port_init(port, dmachs); in smi_port_attach()
923 ret = smi_dvb_init(port); in smi_port_attach()
927 ret = smi_fe_init(port); in smi_port_attach()
932 smi_dvb_exit(port); in smi_port_attach()
934 smi_port_exit(port); in smi_port_attach()
938 static void smi_port_detach(struct smi_port *port) in smi_port_detach() argument
940 smi_fe_exit(port); in smi_port_detach()
941 smi_dvb_exit(port); in smi_port_detach()
942 smi_port_exit(port); in smi_port_detach()