Lines Matching refs:card
185 struct rp2_card *card; member
261 spin_lock_irqsave(&up->card->card_lock, flags); in rp2_mask_ch_irq()
270 spin_unlock_irqrestore(&up->card->card_lock, flags); in rp2_mask_ch_irq()
488 static int rp2_asic_interrupt(struct rp2_card *card, unsigned int asic_id) in rp2_asic_interrupt() argument
490 void __iomem *base = card->bar1 + RP2_ASIC_OFFSET(asic_id); in rp2_asic_interrupt()
496 rp2_ch_interrupt(&card->ports[ch]); in rp2_asic_interrupt()
504 struct rp2_card *card = dev_id; in rp2_uart_interrupt() local
507 handled = rp2_asic_interrupt(card, 0); in rp2_uart_interrupt()
508 if (card->n_ports >= PORTS_PER_ASIC) in rp2_uart_interrupt()
509 handled += rp2_asic_interrupt(card, 1); in rp2_uart_interrupt()
601 static void rp2_reset_asic(struct rp2_card *card, unsigned int asic_id) in rp2_reset_asic() argument
603 void __iomem *base = card->bar1 + RP2_ASIC_OFFSET(asic_id); in rp2_reset_asic()
621 static void rp2_init_card(struct rp2_card *card) in rp2_init_card() argument
623 writel(4, card->bar0 + RP2_FPGA_CTL0); in rp2_init_card()
624 writel(0, card->bar0 + RP2_FPGA_CTL1); in rp2_init_card()
626 rp2_reset_asic(card, 0); in rp2_init_card()
627 if (card->n_ports >= PORTS_PER_ASIC) in rp2_init_card()
628 rp2_reset_asic(card, 1); in rp2_init_card()
630 writel(RP2_IRQ_MASK_EN_m, card->bar0 + RP2_IRQ_MASK); in rp2_init_card()
661 static void rp2_remove_ports(struct rp2_card *card) in rp2_remove_ports() argument
665 for (i = 0; i < card->initialized_ports; i++) in rp2_remove_ports()
666 uart_remove_one_port(&rp2_uart_driver, &card->ports[i].port); in rp2_remove_ports()
667 card->initialized_ports = 0; in rp2_remove_ports()
672 struct rp2_card *card = context; in rp2_fw_cb() local
677 dev_err(&card->pdev->dev, "cannot find '%s' firmware image\n", in rp2_fw_cb()
682 phys_base = pci_resource_start(card->pdev, 1); in rp2_fw_cb()
684 for (i = 0; i < card->n_ports; i++) { in rp2_fw_cb()
685 struct rp2_uart_port *rp = &card->ports[i]; in rp2_fw_cb()
689 rp->asic_base = card->bar1; in rp2_fw_cb()
690 rp->base = card->bar1 + RP2_PORT_BASE + j*RP2_PORT_SPACING; in rp2_fw_cb()
691 rp->ucode = card->bar1 + RP2_UCODE_BASE + j*RP2_UCODE_SPACING; in rp2_fw_cb()
692 rp->card = card; in rp2_fw_cb()
696 p->line = card->minor_start + i; in rp2_fw_cb()
697 p->dev = &card->pdev->dev; in rp2_fw_cb()
704 p->irq = card->pdev->irq; in rp2_fw_cb()
718 dev_err(&card->pdev->dev, in rp2_fw_cb()
720 rp2_remove_ports(card); in rp2_fw_cb()
723 card->initialized_ports++; in rp2_fw_cb()
735 dev_warn(&card->pdev->dev, "driver initialization failed\n"); in rp2_fw_cb()
737 complete(&card->fw_loaded); in rp2_fw_cb()
743 struct rp2_card *card; in rp2_probe() local
748 card = devm_kzalloc(&pdev->dev, sizeof(*card), GFP_KERNEL); in rp2_probe()
749 if (!card) in rp2_probe()
751 pci_set_drvdata(pdev, card); in rp2_probe()
752 spin_lock_init(&card->card_lock); in rp2_probe()
753 init_completion(&card->fw_loaded); in rp2_probe()
764 card->bar0 = bars[0]; in rp2_probe()
765 card->bar1 = bars[1]; in rp2_probe()
766 card->pdev = pdev; in rp2_probe()
768 rp2_decode_cap(id, &card->n_ports, &card->smpte); in rp2_probe()
769 dev_info(&pdev->dev, "found new card with %d ports\n", card->n_ports); in rp2_probe()
771 card->minor_start = rp2_alloc_ports(card->n_ports); in rp2_probe()
772 if (card->minor_start < 0) { in rp2_probe()
778 rp2_init_card(card); in rp2_probe()
780 ports = devm_kzalloc(&pdev->dev, sizeof(*ports) * card->n_ports, in rp2_probe()
784 card->ports = ports; in rp2_probe()
787 IRQF_SHARED, DRV_NAME, card); in rp2_probe()
797 GFP_KERNEL, card, rp2_fw_cb); in rp2_probe()
807 struct rp2_card *card = pci_get_drvdata(pdev); in rp2_remove() local
809 wait_for_completion(&card->fw_loaded); in rp2_remove()
810 rp2_remove_ports(card); in rp2_remove()