Lines Matching full:card
30 static inline void softing_set_reset_dpram(struct softing *card) in softing_set_reset_dpram() argument
32 if (card->pdat->generation >= 2) { in softing_set_reset_dpram()
33 spin_lock_bh(&card->spin); in softing_set_reset_dpram()
34 iowrite8(ioread8(&card->dpram[DPRAM_V2_RESET]) & ~1, in softing_set_reset_dpram()
35 &card->dpram[DPRAM_V2_RESET]); in softing_set_reset_dpram()
36 spin_unlock_bh(&card->spin); in softing_set_reset_dpram()
40 static inline void softing_clr_reset_dpram(struct softing *card) in softing_clr_reset_dpram() argument
42 if (card->pdat->generation >= 2) { in softing_clr_reset_dpram()
43 spin_lock_bh(&card->spin); in softing_clr_reset_dpram()
44 iowrite8(ioread8(&card->dpram[DPRAM_V2_RESET]) | 1, in softing_clr_reset_dpram()
45 &card->dpram[DPRAM_V2_RESET]); in softing_clr_reset_dpram()
46 spin_unlock_bh(&card->spin); in softing_clr_reset_dpram()
55 struct softing *card = priv->card; in softing_netdev_start_xmit() local
65 spin_lock(&card->spin); in softing_netdev_start_xmit()
68 if (!card->fw.up || in softing_netdev_start_xmit()
69 (card->tx.pending >= TXMAX) || in softing_netdev_start_xmit()
72 fifo_wr = ioread8(&card->dpram[DPRAM_TX_WR]); in softing_netdev_start_xmit()
73 fifo_rd = ioread8(&card->dpram[DPRAM_TX_RD]); in softing_netdev_start_xmit()
99 memcpy_toio(&card->dpram[DPRAM_TX + DPRAM_TX_SIZE * fifo_wr], in softing_netdev_start_xmit()
103 iowrite8(fifo_wr, &card->dpram[DPRAM_TX_WR]); in softing_netdev_start_xmit()
104 card->tx.last_bus = priv->index; in softing_netdev_start_xmit()
105 ++card->tx.pending; in softing_netdev_start_xmit()
114 spin_unlock(&card->spin); in softing_netdev_start_xmit()
115 if (card->tx.pending >= TXMAX) { in softing_netdev_start_xmit()
117 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_netdev_start_xmit()
118 if (card->net[j]) in softing_netdev_start_xmit()
119 netif_stop_queue(card->net[j]); in softing_netdev_start_xmit()
149 static int softing_handle_1(struct softing *card) in softing_handle_1() argument
163 lost_msg = ioread8(&card->dpram[DPRAM_RX_LOST]); in softing_handle_1()
167 iowrite8(0, &card->dpram[DPRAM_RX_LOST]); in softing_handle_1()
176 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_handle_1()
177 netdev = card->net[j]; in softing_handle_1()
191 fifo_rd = ioread8(&card->dpram[DPRAM_RX_RD]); in softing_handle_1()
192 fifo_wr = ioread8(&card->dpram[DPRAM_RX_WR]); in softing_handle_1()
199 memcpy_fromio(buf, &card->dpram[DPRAM_RX + DPRAM_RX_SIZE*fifo_rd], in softing_handle_1()
203 iowrite8(fifo_rd, &card->dpram[DPRAM_RX_RD]); in softing_handle_1()
208 /* not quite useful, probably the card has got out */ in softing_handle_1()
210 netdev = card->net[0]; in softing_handle_1()
212 netdev = card->net[1]; in softing_handle_1()
238 iowrite8(state, &card->dpram[priv->index ? in softing_handle_1()
243 ktime = softing_raw2ktime(card, tmp_u32); in softing_handle_1()
276 ktime = softing_raw2ktime(card, tmp_u32); in softing_handle_1()
293 if (card->tx.pending) in softing_handle_1()
294 --card->tx.pending; in softing_handle_1()
320 struct softing *card = (struct softing *)dev_id; in softing_irq_thread() local
326 spin_lock_bh(&card->spin); in softing_irq_thread()
327 while (softing_handle_1(card) > 0) { in softing_irq_thread()
328 ++card->irq.svc_count; in softing_irq_thread()
331 spin_unlock_bh(&card->spin); in softing_irq_thread()
333 offset = card->tx.last_bus; in softing_irq_thread()
334 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_irq_thread()
335 if (card->tx.pending >= TXMAX) in softing_irq_thread()
337 netdev = card->net[(j + offset + 1) % card->pdat->nbus]; in softing_irq_thread()
358 struct softing *card = (struct softing *)dev_id; in softing_irq_v2() local
361 ir = ioread8(&card->dpram[DPRAM_V2_IRQ_TOHOST]); in softing_irq_v2()
362 iowrite8(0, &card->dpram[DPRAM_V2_IRQ_TOHOST]); in softing_irq_v2()
368 struct softing *card = (struct softing *)dev_id; in softing_irq_v1() local
371 ir = ioread8(&card->dpram[DPRAM_IRQ_TOHOST]); in softing_irq_v1()
372 iowrite8(0, &card->dpram[DPRAM_IRQ_TOHOST]); in softing_irq_v1()
425 int softing_enable_irq(struct softing *card, int enable) in softing_enable_irq() argument
429 if (!card->irq.nr) { in softing_enable_irq()
431 } else if (card->irq.requested && !enable) { in softing_enable_irq()
432 free_irq(card->irq.nr, card); in softing_enable_irq()
433 card->irq.requested = 0; in softing_enable_irq()
434 } else if (!card->irq.requested && enable) { in softing_enable_irq()
435 ret = request_threaded_irq(card->irq.nr, in softing_enable_irq()
436 (card->pdat->generation >= 2) ? in softing_enable_irq()
439 dev_name(&card->pdev->dev), card); in softing_enable_irq()
441 dev_alert(&card->pdev->dev, in softing_enable_irq()
443 card->irq.nr); in softing_enable_irq()
446 card->irq.requested = 1; in softing_enable_irq()
451 static void softing_card_shutdown(struct softing *card) in softing_card_shutdown() argument
455 if (mutex_lock_interruptible(&card->fw.lock)) { in softing_card_shutdown()
458 fw_up = card->fw.up; in softing_card_shutdown()
459 card->fw.up = 0; in softing_card_shutdown()
461 if (card->irq.requested && card->irq.nr) { in softing_card_shutdown()
462 free_irq(card->irq.nr, card); in softing_card_shutdown()
463 card->irq.requested = 0; in softing_card_shutdown()
466 if (card->pdat->enable_irq) in softing_card_shutdown()
467 card->pdat->enable_irq(card->pdev, 0); in softing_card_shutdown()
468 softing_set_reset_dpram(card); in softing_card_shutdown()
469 if (card->pdat->reset) in softing_card_shutdown()
470 card->pdat->reset(card->pdev, 1); in softing_card_shutdown()
472 mutex_unlock(&card->fw.lock); in softing_card_shutdown()
475 static int softing_card_boot(struct softing *card) in softing_card_boot() argument
482 if (mutex_lock_interruptible(&card->fw.lock)) in softing_card_boot()
484 if (card->fw.up) { in softing_card_boot()
485 mutex_unlock(&card->fw.lock); in softing_card_boot()
489 if (card->pdat->enable_irq) in softing_card_boot()
490 card->pdat->enable_irq(card->pdev, 1); in softing_card_boot()
491 /* boot card */ in softing_card_boot()
492 softing_set_reset_dpram(card); in softing_card_boot()
493 if (card->pdat->reset) in softing_card_boot()
494 card->pdat->reset(card->pdev, 1); in softing_card_boot()
495 for (j = 0; (j + sizeof(stream)) < card->dpram_size; in softing_card_boot()
498 memcpy_toio(&card->dpram[j], stream, sizeof(stream)); in softing_card_boot()
501 memcpy_fromio(back, &card->dpram[j], sizeof(stream)); in softing_card_boot()
506 dev_alert(&card->pdev->dev, "dpram failed at 0x%04x\n", j); in softing_card_boot()
512 ret = softing_load_fw(card->pdat->boot.fw, card, card->dpram, in softing_card_boot()
513 card->dpram_size, in softing_card_boot()
514 card->pdat->boot.offs - card->pdat->boot.addr); in softing_card_boot()
518 ret = softing_load_fw(card->pdat->load.fw, card, card->dpram, in softing_card_boot()
519 card->dpram_size, in softing_card_boot()
520 card->pdat->load.offs - card->pdat->load.addr); in softing_card_boot()
524 if (card->pdat->reset) in softing_card_boot()
525 card->pdat->reset(card->pdev, 0); in softing_card_boot()
526 softing_clr_reset_dpram(card); in softing_card_boot()
527 ret = softing_bootloader_command(card, 0, "card boot"); in softing_card_boot()
530 ret = softing_load_app_fw(card->pdat->app.fw, card); in softing_card_boot()
534 ret = softing_chip_poweron(card); in softing_card_boot()
538 card->fw.up = 1; in softing_card_boot()
539 mutex_unlock(&card->fw.lock); in softing_card_boot()
542 card->fw.up = 0; in softing_card_boot()
543 if (card->pdat->enable_irq) in softing_card_boot()
544 card->pdat->enable_irq(card->pdev, 0); in softing_card_boot()
545 softing_set_reset_dpram(card); in softing_card_boot()
546 if (card->pdat->reset) in softing_card_boot()
547 card->pdat->reset(card->pdev, 1); in softing_card_boot()
548 mutex_unlock(&card->fw.lock); in softing_card_boot()
578 struct softing *card = priv->card; in store_output() local
587 ret = mutex_lock_interruptible(&card->fw.lock); in store_output()
591 mutex_unlock(&card->fw.lock); in store_output()
595 mutex_unlock(&card->fw.lock); in store_output()
632 static struct net_device *softing_netdev_create(struct softing *card, in softing_netdev_create() argument
640 dev_alert(&card->pdev->dev, "alloc_candev failed\n"); in softing_netdev_create()
645 priv->card = card; in softing_netdev_create()
647 priv->btr_const.brp_max = card->pdat->max_brp; in softing_netdev_create()
648 priv->btr_const.sjw_max = card->pdat->max_sjw; in softing_netdev_create()
653 SET_NETDEV_DEV(netdev, &card->pdev->dev); in softing_netdev_create()
692 struct softing *card = dev_get_drvdata(dev); \
693 return sprintf(buf, "%u\n", card->member); \
701 struct softing *card = dev_get_drvdata(dev); \
702 return sprintf(buf, "%s\n", card->member); \
733 struct softing *card = platform_get_drvdata(pdev); in softing_pdev_remove() local
736 /* first, disable card*/ in softing_pdev_remove()
737 softing_card_shutdown(card); in softing_pdev_remove()
739 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_pdev_remove()
740 if (!card->net[j]) in softing_pdev_remove()
742 softing_netdev_cleanup(card->net[j]); in softing_pdev_remove()
743 card->net[j] = NULL; in softing_pdev_remove()
747 iounmap(card->dpram); in softing_pdev_remove()
748 kfree(card); in softing_pdev_remove()
755 struct softing *card; in softing_pdev_probe() local
766 if (pdat->nbus > ARRAY_SIZE(card->net)) { in softing_pdev_probe()
771 card = kzalloc(sizeof(*card), GFP_KERNEL); in softing_pdev_probe()
772 if (!card) in softing_pdev_probe()
774 card->pdat = pdat; in softing_pdev_probe()
775 card->pdev = pdev; in softing_pdev_probe()
776 platform_set_drvdata(pdev, card); in softing_pdev_probe()
777 mutex_init(&card->fw.lock); in softing_pdev_probe()
778 spin_lock_init(&card->spin); in softing_pdev_probe()
784 card->dpram_phys = pres->start; in softing_pdev_probe()
785 card->dpram_size = resource_size(pres); in softing_pdev_probe()
786 card->dpram = ioremap(card->dpram_phys, card->dpram_size); in softing_pdev_probe()
787 if (!card->dpram) { in softing_pdev_probe()
788 dev_alert(&card->pdev->dev, "dpram ioremap failed\n"); in softing_pdev_probe()
794 card->irq.nr = pres->start; in softing_pdev_probe()
796 /* reset card */ in softing_pdev_probe()
797 ret = softing_card_boot(card); in softing_pdev_probe()
804 card->id.freq = card->pdat->freq; in softing_pdev_probe()
808 dev_alert(&card->pdev->dev, "sysfs failed\n"); in softing_pdev_probe()
812 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_pdev_probe()
813 card->net[j] = netdev = in softing_pdev_probe()
814 softing_netdev_create(card, card->id.chip[j]); in softing_pdev_probe()
821 priv = netdev_priv(card->net[j]); in softing_pdev_probe()
826 card->net[j] = NULL; in softing_pdev_probe()
827 dev_alert(&card->pdev->dev, in softing_pdev_probe()
832 dev_info(&card->pdev->dev, "%s ready.\n", card->pdat->name); in softing_pdev_probe()
836 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { in softing_pdev_probe()
837 if (!card->net[j]) in softing_pdev_probe()
839 softing_netdev_cleanup(card->net[j]); in softing_pdev_probe()
843 softing_card_shutdown(card); in softing_pdev_probe()
845 iounmap(card->dpram); in softing_pdev_probe()
848 kfree(card); in softing_pdev_probe()