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()
526 static int smi_dvbsky_m88ds3103_fe_attach(struct smi_port *port) in smi_dvbsky_m88ds3103_fe_attach() argument
529 struct smi_dev *dev = port->dev; in smi_dvbsky_m88ds3103_fe_attach()
537 i2c = (port->idx == 0) ? &dev->i2c_bus[0] : &dev->i2c_bus[1]; in smi_dvbsky_m88ds3103_fe_attach()
540 port->fe = dvb_attach(m88ds3103_attach, in smi_dvbsky_m88ds3103_fe_attach()
542 if (!port->fe) { in smi_dvbsky_m88ds3103_fe_attach()
547 ts2020_config.fe = port->fe; in smi_dvbsky_m88ds3103_fe_attach()
558 port->fe->ops.read_signal_strength = in smi_dvbsky_m88ds3103_fe_attach()
559 port->fe->ops.tuner_ops.get_rf_strength; in smi_dvbsky_m88ds3103_fe_attach()
561 port->i2c_client_tuner = tuner_client; in smi_dvbsky_m88ds3103_fe_attach()
565 dvb_frontend_detach(port->fe); in smi_dvbsky_m88ds3103_fe_attach()
581 static int smi_dvbsky_m88rs6000_fe_attach(struct smi_port *port) in smi_dvbsky_m88rs6000_fe_attach() argument
584 struct smi_dev *dev = port->dev; in smi_dvbsky_m88rs6000_fe_attach()
593 i2c = (port->idx == 0) ? &dev->i2c_bus[0] : &dev->i2c_bus[1]; in smi_dvbsky_m88rs6000_fe_attach()
596 port->fe = dvb_attach(m88ds3103_attach, in smi_dvbsky_m88rs6000_fe_attach()
598 if (!port->fe) { in smi_dvbsky_m88rs6000_fe_attach()
603 m88rs6000t_config.fe = port->fe; in smi_dvbsky_m88rs6000_fe_attach()
614 port->fe->ops.read_signal_strength = in smi_dvbsky_m88rs6000_fe_attach()
615 port->fe->ops.tuner_ops.get_rf_strength; in smi_dvbsky_m88rs6000_fe_attach()
617 port->i2c_client_tuner = tuner_client; in smi_dvbsky_m88rs6000_fe_attach()
621 dvb_frontend_detach(port->fe); in smi_dvbsky_m88rs6000_fe_attach()
625 static int smi_dvbsky_sit2_fe_attach(struct smi_port *port) in smi_dvbsky_sit2_fe_attach() argument
628 struct smi_dev *dev = port->dev; in smi_dvbsky_sit2_fe_attach()
637 i2c = (port->idx == 0) ? &dev->i2c_bus[0] : &dev->i2c_bus[1]; in smi_dvbsky_sit2_fe_attach()
642 si2168_config.fe = &port->fe; in smi_dvbsky_sit2_fe_attach()
655 port->i2c_client_demod = client_demod; in smi_dvbsky_sit2_fe_attach()
659 si2157_config.fe = port->fe; in smi_dvbsky_sit2_fe_attach()
668 smi_del_i2c_client(port->i2c_client_demod); in smi_dvbsky_sit2_fe_attach()
669 port->i2c_client_demod = NULL; in smi_dvbsky_sit2_fe_attach()
673 port->i2c_client_tuner = client_tuner; in smi_dvbsky_sit2_fe_attach()
677 static int smi_fe_init(struct smi_port *port) in smi_fe_init() argument
680 struct smi_dev *dev = port->dev; in smi_fe_init()
681 struct dvb_adapter *adap = &port->dvb_adapter; in smi_fe_init()
684 dev_dbg(&port->dev->pci_dev->dev, in smi_fe_init()
686 __func__, port->idx, port->fe_type); in smi_fe_init()
687 switch (port->fe_type) { in smi_fe_init()
689 ret = smi_dvbsky_m88ds3103_fe_attach(port); in smi_fe_init()
692 ret = smi_dvbsky_m88rs6000_fe_attach(port); in smi_fe_init()
695 ret = smi_dvbsky_sit2_fe_attach(port); in smi_fe_init()
702 ret = dvb_register_frontend(adap, port->fe); in smi_fe_init()
704 if (port->i2c_client_tuner) in smi_fe_init()
705 smi_del_i2c_client(port->i2c_client_tuner); in smi_fe_init()
706 if (port->i2c_client_demod) in smi_fe_init()
707 smi_del_i2c_client(port->i2c_client_demod); in smi_fe_init()
708 dvb_frontend_detach(port->fe); in smi_fe_init()
713 dev_info(&port->dev->pci_dev->dev, in smi_fe_init()
714 "DVBSky SMI PCIe MAC= %pM\n", mac_ee + (port->idx)*8); in smi_fe_init()
715 memcpy(adap->proposed_mac, mac_ee + (port->idx)*8, 6); in smi_fe_init()
719 static void smi_fe_exit(struct smi_port *port) in smi_fe_exit() argument
721 dvb_unregister_frontend(port->fe); in smi_fe_exit()
723 if (port->i2c_client_tuner) in smi_fe_exit()
724 smi_del_i2c_client(port->i2c_client_tuner); in smi_fe_exit()
725 if (port->i2c_client_demod) in smi_fe_exit()
726 smi_del_i2c_client(port->i2c_client_demod); in smi_fe_exit()
727 dvb_frontend_detach(port->fe); in smi_fe_exit()
770 static u32 smi_config_DMA(struct smi_port *port) in smi_config_DMA() argument
772 struct smi_dev *dev = port->dev; in smi_config_DMA()
779 dmaManagement = smi_read(port->DMA_MANAGEMENT); in smi_config_DMA()
781 if (port->_dmaInterruptCH0) { in smi_config_DMA()
783 mem = port->dma_addr[0]; in smi_config_DMA()
791 smi_write(port->DMA_CHAN0_ADDR_LOW, dmaMemPtrLow); in smi_config_DMA()
792 smi_write(port->DMA_CHAN0_ADDR_HI, dmaMemPtrHi); in smi_config_DMA()
793 smi_write(port->DMA_CHAN0_CONTROL, dmaCtlReg); in smi_config_DMA()
796 if (port->_dmaInterruptCH1) { in smi_config_DMA()
798 mem = port->dma_addr[1]; in smi_config_DMA()
806 smi_write(port->DMA_CHAN1_ADDR_LOW, dmaMemPtrLow); in smi_config_DMA()
807 smi_write(port->DMA_CHAN1_ADDR_HI, dmaMemPtrHi); in smi_config_DMA()
808 smi_write(port->DMA_CHAN1_CONTROL, dmaCtlReg); in smi_config_DMA()
816 struct smi_port *port = dvbdmx->priv; in smi_start_feed() local
817 struct smi_dev *dev = port->dev; in smi_start_feed()
820 if (port->users++ == 0) { in smi_start_feed()
821 dmaManagement = smi_config_DMA(port); in smi_start_feed()
822 smi_port_clearInterrupt(port); in smi_start_feed()
823 smi_port_enableInterrupt(port); in smi_start_feed()
824 smi_write(port->DMA_MANAGEMENT, dmaManagement); in smi_start_feed()
825 tasklet_enable(&port->tasklet); in smi_start_feed()
827 return port->users; in smi_start_feed()
833 struct smi_port *port = dvbdmx->priv; in smi_stop_feed() local
834 struct smi_dev *dev = port->dev; in smi_stop_feed()
836 if (--port->users) in smi_stop_feed()
837 return port->users; in smi_stop_feed()
839 tasklet_disable(&port->tasklet); in smi_stop_feed()
840 smi_port_disableInterrupt(port); in smi_stop_feed()
841 smi_clear(port->DMA_MANAGEMENT, 0x30003); in smi_stop_feed()
845 static int smi_dvb_init(struct smi_port *port) in smi_dvb_init() argument
848 struct dvb_adapter *adap = &port->dvb_adapter; in smi_dvb_init()
849 struct dvb_demux *dvbdemux = &port->demux; in smi_dvb_init()
851 dev_dbg(&port->dev->pci_dev->dev, in smi_dvb_init()
852 "%s, port %d\n", __func__, port->idx); in smi_dvb_init()
855 &port->dev->pci_dev->dev, in smi_dvb_init()
858 dev_err(&port->dev->pci_dev->dev, "Fail to register DVB adapter.\n"); in smi_dvb_init()
863 smi_stop_feed, port); in smi_dvb_init()
867 ret = my_dvb_dmxdev_ts_card_init(&port->dmxdev, &port->demux, in smi_dvb_init()
868 &port->hw_frontend, in smi_dvb_init()
869 &port->mem_frontend, adap); in smi_dvb_init()
873 ret = dvb_net_init(adap, &port->dvbnet, port->dmxdev.demux); in smi_dvb_init()
879 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &port->hw_frontend); in smi_dvb_init()
880 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &port->mem_frontend); in smi_dvb_init()
881 dvb_dmxdev_release(&port->dmxdev); in smi_dvb_init()
883 dvb_dmx_release(&port->demux); in smi_dvb_init()
885 dvb_unregister_adapter(&port->dvb_adapter); in smi_dvb_init()
889 static void smi_dvb_exit(struct smi_port *port) in smi_dvb_exit() argument
891 struct dvb_demux *dvbdemux = &port->demux; in smi_dvb_exit()
893 dvb_net_release(&port->dvbnet); in smi_dvb_exit()
896 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &port->hw_frontend); in smi_dvb_exit()
897 dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &port->mem_frontend); in smi_dvb_exit()
898 dvb_dmxdev_release(&port->dmxdev); in smi_dvb_exit()
899 dvb_dmx_release(&port->demux); in smi_dvb_exit()
901 dvb_unregister_adapter(&port->dvb_adapter); in smi_dvb_exit()
905 struct smi_port *port, int index) in smi_port_attach() argument
909 port->dev = dev; in smi_port_attach()
910 port->idx = index; in smi_port_attach()
911 port->fe_type = (index == 0) ? dev->info->fe_0 : dev->info->fe_1; in smi_port_attach()
914 ret = smi_port_init(port, dmachs); in smi_port_attach()
918 ret = smi_dvb_init(port); in smi_port_attach()
922 ret = smi_fe_init(port); in smi_port_attach()
927 smi_dvb_exit(port); in smi_port_attach()
929 smi_port_exit(port); in smi_port_attach()
933 static void smi_port_detach(struct smi_port *port) in smi_port_detach() argument
935 smi_fe_exit(port); in smi_port_detach()
936 smi_dvb_exit(port); in smi_port_detach()
937 smi_port_exit(port); in smi_port_detach()