Lines Matching refs:card

41 static inline void softing_set_reset_dpram(struct softing *card)  in softing_set_reset_dpram()  argument
43 if (card->pdat->generation >= 2) { in softing_set_reset_dpram()
44 spin_lock_bh(&card->spin); in softing_set_reset_dpram()
45 iowrite8(ioread8(&card->dpram[DPRAM_V2_RESET]) & ~1, in softing_set_reset_dpram()
46 &card->dpram[DPRAM_V2_RESET]); in softing_set_reset_dpram()
47 spin_unlock_bh(&card->spin); in softing_set_reset_dpram()
51 static inline void softing_clr_reset_dpram(struct softing *card) in softing_clr_reset_dpram() argument
53 if (card->pdat->generation >= 2) { in softing_clr_reset_dpram()
54 spin_lock_bh(&card->spin); in softing_clr_reset_dpram()
55 iowrite8(ioread8(&card->dpram[DPRAM_V2_RESET]) | 1, in softing_clr_reset_dpram()
56 &card->dpram[DPRAM_V2_RESET]); in softing_clr_reset_dpram()
57 spin_unlock_bh(&card->spin); in softing_clr_reset_dpram()
66 struct softing *card = priv->card; in softing_netdev_start_xmit() local
76 spin_lock(&card->spin); in softing_netdev_start_xmit()
79 if (!card->fw.up || in softing_netdev_start_xmit()
80 (card->tx.pending >= TXMAX) || in softing_netdev_start_xmit()
83 fifo_wr = ioread8(&card->dpram[DPRAM_TX_WR]); in softing_netdev_start_xmit()
84 fifo_rd = ioread8(&card->dpram[DPRAM_TX_RD]); in softing_netdev_start_xmit()
110 memcpy_toio(&card->dpram[DPRAM_TX + DPRAM_TX_SIZE * fifo_wr], in softing_netdev_start_xmit()
114 iowrite8(fifo_wr, &card->dpram[DPRAM_TX_WR]); in softing_netdev_start_xmit()
115 card->tx.last_bus = priv->index; in softing_netdev_start_xmit()
116 ++card->tx.pending; in softing_netdev_start_xmit()
125 spin_unlock(&card->spin); in softing_netdev_start_xmit()
126 if (card->tx.pending >= TXMAX) { in softing_netdev_start_xmit()
128 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_netdev_start_xmit()
129 if (card->net[j]) in softing_netdev_start_xmit()
130 netif_stop_queue(card->net[j]); in softing_netdev_start_xmit()
160 static int softing_handle_1(struct softing *card) in softing_handle_1() argument
174 lost_msg = ioread8(&card->dpram[DPRAM_RX_LOST]); in softing_handle_1()
178 iowrite8(0, &card->dpram[DPRAM_RX_LOST]); in softing_handle_1()
187 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_handle_1()
188 netdev = card->net[j]; in softing_handle_1()
202 fifo_rd = ioread8(&card->dpram[DPRAM_RX_RD]); in softing_handle_1()
203 fifo_wr = ioread8(&card->dpram[DPRAM_RX_WR]); in softing_handle_1()
210 memcpy_fromio(buf, &card->dpram[DPRAM_RX + DPRAM_RX_SIZE*fifo_rd], in softing_handle_1()
214 iowrite8(fifo_rd, &card->dpram[DPRAM_RX_RD]); in softing_handle_1()
221 netdev = card->net[0]; in softing_handle_1()
223 netdev = card->net[1]; in softing_handle_1()
249 iowrite8(state, &card->dpram[priv->index ? in softing_handle_1()
254 ktime = softing_raw2ktime(card, tmp_u32); in softing_handle_1()
287 ktime = softing_raw2ktime(card, tmp_u32); in softing_handle_1()
304 if (card->tx.pending) in softing_handle_1()
305 --card->tx.pending; in softing_handle_1()
331 struct softing *card = (struct softing *)dev_id; in softing_irq_thread() local
337 spin_lock_bh(&card->spin); in softing_irq_thread()
338 while (softing_handle_1(card) > 0) { in softing_irq_thread()
339 ++card->irq.svc_count; in softing_irq_thread()
342 spin_unlock_bh(&card->spin); in softing_irq_thread()
344 offset = card->tx.last_bus; in softing_irq_thread()
345 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_irq_thread()
346 if (card->tx.pending >= TXMAX) in softing_irq_thread()
348 netdev = card->net[(j + offset + 1) % card->pdat->nbus]; in softing_irq_thread()
369 struct softing *card = (struct softing *)dev_id; in softing_irq_v2() local
372 ir = ioread8(&card->dpram[DPRAM_V2_IRQ_TOHOST]); in softing_irq_v2()
373 iowrite8(0, &card->dpram[DPRAM_V2_IRQ_TOHOST]); in softing_irq_v2()
379 struct softing *card = (struct softing *)dev_id; in softing_irq_v1() local
382 ir = ioread8(&card->dpram[DPRAM_IRQ_TOHOST]); in softing_irq_v1()
383 iowrite8(0, &card->dpram[DPRAM_IRQ_TOHOST]); in softing_irq_v1()
431 int softing_enable_irq(struct softing *card, int enable) in softing_enable_irq() argument
435 if (!card->irq.nr) { in softing_enable_irq()
437 } else if (card->irq.requested && !enable) { in softing_enable_irq()
438 free_irq(card->irq.nr, card); in softing_enable_irq()
439 card->irq.requested = 0; in softing_enable_irq()
440 } else if (!card->irq.requested && enable) { in softing_enable_irq()
441 ret = request_threaded_irq(card->irq.nr, in softing_enable_irq()
442 (card->pdat->generation >= 2) ? in softing_enable_irq()
445 dev_name(&card->pdev->dev), card); in softing_enable_irq()
447 dev_alert(&card->pdev->dev, in softing_enable_irq()
449 card->irq.nr); in softing_enable_irq()
452 card->irq.requested = 1; in softing_enable_irq()
457 static void softing_card_shutdown(struct softing *card) in softing_card_shutdown() argument
461 if (mutex_lock_interruptible(&card->fw.lock)) in softing_card_shutdown()
463 fw_up = card->fw.up; in softing_card_shutdown()
464 card->fw.up = 0; in softing_card_shutdown()
466 if (card->irq.requested && card->irq.nr) { in softing_card_shutdown()
467 free_irq(card->irq.nr, card); in softing_card_shutdown()
468 card->irq.requested = 0; in softing_card_shutdown()
471 if (card->pdat->enable_irq) in softing_card_shutdown()
472 card->pdat->enable_irq(card->pdev, 0); in softing_card_shutdown()
473 softing_set_reset_dpram(card); in softing_card_shutdown()
474 if (card->pdat->reset) in softing_card_shutdown()
475 card->pdat->reset(card->pdev, 1); in softing_card_shutdown()
477 mutex_unlock(&card->fw.lock); in softing_card_shutdown()
480 static int softing_card_boot(struct softing *card) in softing_card_boot() argument
487 if (mutex_lock_interruptible(&card->fw.lock)) in softing_card_boot()
489 if (card->fw.up) { in softing_card_boot()
490 mutex_unlock(&card->fw.lock); in softing_card_boot()
494 if (card->pdat->enable_irq) in softing_card_boot()
495 card->pdat->enable_irq(card->pdev, 1); in softing_card_boot()
497 softing_set_reset_dpram(card); in softing_card_boot()
498 if (card->pdat->reset) in softing_card_boot()
499 card->pdat->reset(card->pdev, 1); in softing_card_boot()
500 for (j = 0; (j + sizeof(stream)) < card->dpram_size; in softing_card_boot()
503 memcpy_toio(&card->dpram[j], stream, sizeof(stream)); in softing_card_boot()
506 memcpy_fromio(back, &card->dpram[j], sizeof(stream)); in softing_card_boot()
511 dev_alert(&card->pdev->dev, "dpram failed at 0x%04x\n", j); in softing_card_boot()
517 ret = softing_load_fw(card->pdat->boot.fw, card, card->dpram, in softing_card_boot()
518 card->dpram_size, in softing_card_boot()
519 card->pdat->boot.offs - card->pdat->boot.addr); in softing_card_boot()
523 ret = softing_load_fw(card->pdat->load.fw, card, card->dpram, in softing_card_boot()
524 card->dpram_size, in softing_card_boot()
525 card->pdat->load.offs - card->pdat->load.addr); in softing_card_boot()
529 if (card->pdat->reset) in softing_card_boot()
530 card->pdat->reset(card->pdev, 0); in softing_card_boot()
531 softing_clr_reset_dpram(card); in softing_card_boot()
532 ret = softing_bootloader_command(card, 0, "card boot"); in softing_card_boot()
535 ret = softing_load_app_fw(card->pdat->app.fw, card); in softing_card_boot()
539 ret = softing_chip_poweron(card); in softing_card_boot()
543 card->fw.up = 1; in softing_card_boot()
544 mutex_unlock(&card->fw.lock); in softing_card_boot()
547 card->fw.up = 0; in softing_card_boot()
548 if (card->pdat->enable_irq) in softing_card_boot()
549 card->pdat->enable_irq(card->pdev, 0); in softing_card_boot()
550 softing_set_reset_dpram(card); in softing_card_boot()
551 if (card->pdat->reset) in softing_card_boot()
552 card->pdat->reset(card->pdev, 1); in softing_card_boot()
553 mutex_unlock(&card->fw.lock); in softing_card_boot()
583 struct softing *card = priv->card; in store_output() local
592 ret = mutex_lock_interruptible(&card->fw.lock); in store_output()
596 mutex_unlock(&card->fw.lock); in store_output()
600 mutex_unlock(&card->fw.lock); in store_output()
637 static struct net_device *softing_netdev_create(struct softing *card, in softing_netdev_create() argument
645 dev_alert(&card->pdev->dev, "alloc_candev failed\n"); in softing_netdev_create()
650 priv->card = card; in softing_netdev_create()
652 priv->btr_const.brp_max = card->pdat->max_brp; in softing_netdev_create()
653 priv->btr_const.sjw_max = card->pdat->max_sjw; in softing_netdev_create()
658 SET_NETDEV_DEV(netdev, &card->pdev->dev); in softing_netdev_create()
697 struct softing *card = platform_get_drvdata(to_platform_device(dev)); \
698 return sprintf(buf, "%u\n", card->member); \
706 struct softing *card = platform_get_drvdata(to_platform_device(dev)); \
707 return sprintf(buf, "%s\n", card->member); \
738 struct softing *card = platform_get_drvdata(pdev); in softing_pdev_remove() local
742 softing_card_shutdown(card); in softing_pdev_remove()
744 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_pdev_remove()
745 if (!card->net[j]) in softing_pdev_remove()
747 softing_netdev_cleanup(card->net[j]); in softing_pdev_remove()
748 card->net[j] = NULL; in softing_pdev_remove()
752 iounmap(card->dpram); in softing_pdev_remove()
753 kfree(card); in softing_pdev_remove()
760 struct softing *card; in softing_pdev_probe() local
771 if (pdat->nbus > ARRAY_SIZE(card->net)) { in softing_pdev_probe()
776 card = kzalloc(sizeof(*card), GFP_KERNEL); in softing_pdev_probe()
777 if (!card) in softing_pdev_probe()
779 card->pdat = pdat; in softing_pdev_probe()
780 card->pdev = pdev; in softing_pdev_probe()
781 platform_set_drvdata(pdev, card); in softing_pdev_probe()
782 mutex_init(&card->fw.lock); in softing_pdev_probe()
783 spin_lock_init(&card->spin); in softing_pdev_probe()
789 card->dpram_phys = pres->start; in softing_pdev_probe()
790 card->dpram_size = resource_size(pres); in softing_pdev_probe()
791 card->dpram = ioremap_nocache(card->dpram_phys, card->dpram_size); in softing_pdev_probe()
792 if (!card->dpram) { in softing_pdev_probe()
793 dev_alert(&card->pdev->dev, "dpram ioremap failed\n"); in softing_pdev_probe()
799 card->irq.nr = pres->start; in softing_pdev_probe()
802 ret = softing_card_boot(card); in softing_pdev_probe()
809 card->id.freq = card->pdat->freq; in softing_pdev_probe()
813 dev_alert(&card->pdev->dev, "sysfs failed\n"); in softing_pdev_probe()
817 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_pdev_probe()
818 card->net[j] = netdev = in softing_pdev_probe()
819 softing_netdev_create(card, card->id.chip[j]); in softing_pdev_probe()
826 priv = netdev_priv(card->net[j]); in softing_pdev_probe()
831 card->net[j] = NULL; in softing_pdev_probe()
832 dev_alert(&card->pdev->dev, in softing_pdev_probe()
837 dev_info(&card->pdev->dev, "%s ready.\n", card->pdat->name); in softing_pdev_probe()
841 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_pdev_probe()
842 if (!card->net[j]) in softing_pdev_probe()
844 softing_netdev_cleanup(card->net[j]); in softing_pdev_probe()
848 softing_card_shutdown(card); in softing_pdev_probe()
850 iounmap(card->dpram); in softing_pdev_probe()
853 kfree(card); in softing_pdev_probe()