Lines Matching full:ndev

42 static inline void moxart_emac_write(struct net_device *ndev,  in moxart_emac_write()  argument
45 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_emac_write()
50 static void moxart_update_mac_address(struct net_device *ndev) in moxart_update_mac_address() argument
52 moxart_emac_write(ndev, REG_MAC_MS_ADDRESS, in moxart_update_mac_address()
53 ((ndev->dev_addr[0] << 8) | (ndev->dev_addr[1]))); in moxart_update_mac_address()
54 moxart_emac_write(ndev, REG_MAC_MS_ADDRESS + 4, in moxart_update_mac_address()
55 ((ndev->dev_addr[2] << 24) | in moxart_update_mac_address()
56 (ndev->dev_addr[3] << 16) | in moxart_update_mac_address()
57 (ndev->dev_addr[4] << 8) | in moxart_update_mac_address()
58 (ndev->dev_addr[5]))); in moxart_update_mac_address()
61 static int moxart_set_mac_address(struct net_device *ndev, void *addr) in moxart_set_mac_address() argument
68 memcpy(ndev->dev_addr, address->sa_data, ndev->addr_len); in moxart_set_mac_address()
69 moxart_update_mac_address(ndev); in moxart_set_mac_address()
74 static void moxart_mac_free_memory(struct net_device *ndev) in moxart_mac_free_memory() argument
76 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_free_memory()
80 dma_unmap_single(&ndev->dev, priv->rx_mapping[i], in moxart_mac_free_memory()
97 static void moxart_mac_reset(struct net_device *ndev) in moxart_mac_reset() argument
99 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_reset()
110 static void moxart_mac_enable(struct net_device *ndev) in moxart_mac_enable() argument
112 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_enable()
125 static void moxart_mac_setup_desc_ring(struct net_device *ndev) in moxart_mac_setup_desc_ring() argument
127 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_setup_desc_ring()
150 priv->rx_mapping[i] = dma_map_single(&ndev->dev, in moxart_mac_setup_desc_ring()
154 if (dma_mapping_error(&ndev->dev, priv->rx_mapping[i])) in moxart_mac_setup_desc_ring()
155 netdev_err(ndev, "DMA mapping error\n"); in moxart_mac_setup_desc_ring()
171 static int moxart_mac_open(struct net_device *ndev) in moxart_mac_open() argument
173 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_open()
175 if (!is_valid_ether_addr(ndev->dev_addr)) in moxart_mac_open()
180 moxart_mac_reset(ndev); in moxart_mac_open()
181 moxart_update_mac_address(ndev); in moxart_mac_open()
182 moxart_mac_setup_desc_ring(ndev); in moxart_mac_open()
183 moxart_mac_enable(ndev); in moxart_mac_open()
184 netif_start_queue(ndev); in moxart_mac_open()
186 netdev_dbg(ndev, "%s: IMR=0x%x, MACCR=0x%x\n", in moxart_mac_open()
193 static int moxart_mac_stop(struct net_device *ndev) in moxart_mac_stop() argument
195 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_stop()
199 netif_stop_queue(ndev); in moxart_mac_stop()
215 struct net_device *ndev = priv->ndev; in moxart_rx_poll() local
233 ndev->stats.rx_dropped++; in moxart_rx_poll()
234 ndev->stats.rx_errors++; in moxart_rx_poll()
243 dma_sync_single_for_cpu(&ndev->dev, in moxart_rx_poll()
246 skb = netdev_alloc_skb_ip_align(ndev, len); in moxart_rx_poll()
250 ndev->stats.rx_dropped++; in moxart_rx_poll()
251 ndev->stats.rx_errors++; in moxart_rx_poll()
257 skb->protocol = eth_type_trans(skb, ndev); in moxart_rx_poll()
261 ndev->stats.rx_packets++; in moxart_rx_poll()
262 ndev->stats.rx_bytes += len; in moxart_rx_poll()
264 ndev->stats.multicast++; in moxart_rx_poll()
283 static int moxart_tx_queue_space(struct net_device *ndev) in moxart_tx_queue_space() argument
285 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_tx_queue_space()
290 static void moxart_tx_finished(struct net_device *ndev) in moxart_tx_finished() argument
292 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_tx_finished()
297 dma_unmap_single(&ndev->dev, priv->tx_mapping[tx_tail], in moxart_tx_finished()
300 ndev->stats.tx_packets++; in moxart_tx_finished()
301 ndev->stats.tx_bytes += priv->tx_skb[tx_tail]->len; in moxart_tx_finished()
309 if (netif_queue_stopped(ndev) && in moxart_tx_finished()
310 moxart_tx_queue_space(ndev) >= TX_WAKE_THRESHOLD) in moxart_tx_finished()
311 netif_wake_queue(ndev); in moxart_tx_finished()
316 struct net_device *ndev = (struct net_device *)dev_id; in moxart_mac_interrupt() local
317 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_interrupt()
321 moxart_tx_finished(ndev); in moxart_mac_interrupt()
335 struct net_device *ndev) in moxart_mac_start_xmit() argument
337 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_start_xmit()
349 if (moxart_tx_queue_space(ndev) == 1) in moxart_mac_start_xmit()
350 netif_stop_queue(ndev); in moxart_mac_start_xmit()
354 ndev->stats.tx_dropped++; in moxart_mac_start_xmit()
361 priv->tx_mapping[tx_head] = dma_map_single(&ndev->dev, skb->data, in moxart_mac_start_xmit()
363 if (dma_mapping_error(&ndev->dev, priv->tx_mapping[tx_head])) { in moxart_mac_start_xmit()
364 netdev_err(ndev, "DMA mapping error\n"); in moxart_mac_start_xmit()
382 dma_sync_single_for_device(&ndev->dev, priv->tx_mapping[tx_head], in moxart_mac_start_xmit()
397 netif_trans_update(ndev); in moxart_mac_start_xmit()
405 static void moxart_mac_setmulticast(struct net_device *ndev) in moxart_mac_setmulticast() argument
407 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_setmulticast()
411 netdev_for_each_mc_addr(ha, ndev) { in moxart_mac_setmulticast()
426 static void moxart_mac_set_rx_mode(struct net_device *ndev) in moxart_mac_set_rx_mode() argument
428 struct moxart_mac_priv_t *priv = netdev_priv(ndev); in moxart_mac_set_rx_mode()
432 (ndev->flags & IFF_PROMISC) ? (priv->reg_maccr |= RCV_ALL) : in moxart_mac_set_rx_mode()
435 (ndev->flags & IFF_ALLMULTI) ? (priv->reg_maccr |= RX_MULTIPKT) : in moxart_mac_set_rx_mode()
438 if ((ndev->flags & IFF_MULTICAST) && netdev_mc_count(ndev)) { in moxart_mac_set_rx_mode()
440 moxart_mac_setmulticast(ndev); in moxart_mac_set_rx_mode()
463 struct net_device *ndev; in moxart_mac_probe() local
469 ndev = alloc_etherdev(sizeof(struct moxart_mac_priv_t)); in moxart_mac_probe()
470 if (!ndev) in moxart_mac_probe()
475 netdev_err(ndev, "irq_of_parse_and_map failed\n"); in moxart_mac_probe()
480 priv = netdev_priv(ndev); in moxart_mac_probe()
481 priv->ndev = ndev; in moxart_mac_probe()
485 ndev->base_addr = res->start; in moxart_mac_probe()
528 platform_set_drvdata(pdev, ndev); in moxart_mac_probe()
531 pdev->name, ndev); in moxart_mac_probe()
533 netdev_err(ndev, "devm_request_irq failed\n"); in moxart_mac_probe()
537 ndev->netdev_ops = &moxart_netdev_ops; in moxart_mac_probe()
538 netif_napi_add(ndev, &priv->napi, moxart_rx_poll, RX_DESC_NUM); in moxart_mac_probe()
539 ndev->priv_flags |= IFF_UNICAST_FLT; in moxart_mac_probe()
540 ndev->irq = irq; in moxart_mac_probe()
542 SET_NETDEV_DEV(ndev, &pdev->dev); in moxart_mac_probe()
544 ret = register_netdev(ndev); in moxart_mac_probe()
546 free_netdev(ndev); in moxart_mac_probe()
550 netdev_dbg(ndev, "%s: IRQ=%d address=%pM\n", in moxart_mac_probe()
551 __func__, ndev->irq, ndev->dev_addr); in moxart_mac_probe()
556 netdev_err(ndev, "init failed\n"); in moxart_mac_probe()
557 moxart_mac_free_memory(ndev); in moxart_mac_probe()
559 free_netdev(ndev); in moxart_mac_probe()
565 struct net_device *ndev = platform_get_drvdata(pdev); in moxart_remove() local
567 unregister_netdev(ndev); in moxart_remove()
568 devm_free_irq(&pdev->dev, ndev->irq, ndev); in moxart_remove()
569 moxart_mac_free_memory(ndev); in moxart_remove()
570 free_netdev(ndev); in moxart_remove()