.. | .. |
---|
172 | 172 | flags = 0; |
---|
173 | 173 | |
---|
174 | 174 | for (i = 0; i < nr_frags; i++) { |
---|
175 | | - struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i]; |
---|
| 175 | + skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; |
---|
176 | 176 | int len = skb_frag_size(frag); |
---|
177 | 177 | |
---|
178 | 178 | index = (index + 1) % BGMAC_TX_RING_SLOTS; |
---|
.. | .. |
---|
189 | 189 | } |
---|
190 | 190 | |
---|
191 | 191 | slot->skb = skb; |
---|
192 | | - ring->end += nr_frags + 1; |
---|
193 | 192 | netdev_sent_queue(net_dev, skb->len); |
---|
| 193 | + ring->end += nr_frags + 1; |
---|
194 | 194 | |
---|
195 | 195 | wmb(); |
---|
196 | 196 | |
---|
.. | .. |
---|
616 | 616 | static const u16 ring_base[] = { BGMAC_DMA_BASE0, BGMAC_DMA_BASE1, |
---|
617 | 617 | BGMAC_DMA_BASE2, BGMAC_DMA_BASE3, }; |
---|
618 | 618 | int size; /* ring size: different for Tx and Rx */ |
---|
619 | | - int err; |
---|
620 | 619 | int i; |
---|
621 | 620 | |
---|
622 | 621 | BUILD_BUG_ON(BGMAC_MAX_TX_RINGS > ARRAY_SIZE(ring_base)); |
---|
.. | .. |
---|
635 | 634 | |
---|
636 | 635 | /* Alloc ring of descriptors */ |
---|
637 | 636 | size = BGMAC_TX_RING_SLOTS * sizeof(struct bgmac_dma_desc); |
---|
638 | | - ring->cpu_base = dma_zalloc_coherent(dma_dev, size, |
---|
639 | | - &ring->dma_base, |
---|
640 | | - GFP_KERNEL); |
---|
| 637 | + ring->cpu_base = dma_alloc_coherent(dma_dev, size, |
---|
| 638 | + &ring->dma_base, |
---|
| 639 | + GFP_KERNEL); |
---|
641 | 640 | if (!ring->cpu_base) { |
---|
642 | 641 | dev_err(bgmac->dev, "Allocation of TX ring 0x%X failed\n", |
---|
643 | 642 | ring->mmio_base); |
---|
.. | .. |
---|
660 | 659 | |
---|
661 | 660 | /* Alloc ring of descriptors */ |
---|
662 | 661 | size = BGMAC_RX_RING_SLOTS * sizeof(struct bgmac_dma_desc); |
---|
663 | | - ring->cpu_base = dma_zalloc_coherent(dma_dev, size, |
---|
664 | | - &ring->dma_base, |
---|
665 | | - GFP_KERNEL); |
---|
| 662 | + ring->cpu_base = dma_alloc_coherent(dma_dev, size, |
---|
| 663 | + &ring->dma_base, |
---|
| 664 | + GFP_KERNEL); |
---|
666 | 665 | if (!ring->cpu_base) { |
---|
667 | 666 | dev_err(bgmac->dev, "Allocation of RX ring 0x%X failed\n", |
---|
668 | 667 | ring->mmio_base); |
---|
669 | | - err = -ENOMEM; |
---|
670 | 668 | goto err_dma_free; |
---|
671 | 669 | } |
---|
672 | 670 | |
---|
.. | .. |
---|
1250 | 1248 | return 0; |
---|
1251 | 1249 | } |
---|
1252 | 1250 | |
---|
1253 | | -static int bgmac_ioctl(struct net_device *net_dev, struct ifreq *ifr, int cmd) |
---|
| 1251 | +static int bgmac_change_mtu(struct net_device *net_dev, int mtu) |
---|
1254 | 1252 | { |
---|
1255 | | - if (!netif_running(net_dev)) |
---|
1256 | | - return -EINVAL; |
---|
| 1253 | + struct bgmac *bgmac = netdev_priv(net_dev); |
---|
1257 | 1254 | |
---|
1258 | | - return phy_mii_ioctl(net_dev->phydev, ifr, cmd); |
---|
| 1255 | + bgmac_write(bgmac, BGMAC_RXMAX_LENGTH, 32 + mtu); |
---|
| 1256 | + return 0; |
---|
1259 | 1257 | } |
---|
1260 | 1258 | |
---|
1261 | 1259 | static const struct net_device_ops bgmac_netdev_ops = { |
---|
.. | .. |
---|
1265 | 1263 | .ndo_set_rx_mode = bgmac_set_rx_mode, |
---|
1266 | 1264 | .ndo_set_mac_address = bgmac_set_mac_address, |
---|
1267 | 1265 | .ndo_validate_addr = eth_validate_addr, |
---|
1268 | | - .ndo_do_ioctl = bgmac_ioctl, |
---|
| 1266 | + .ndo_do_ioctl = phy_do_ioctl_running, |
---|
| 1267 | + .ndo_change_mtu = bgmac_change_mtu, |
---|
1269 | 1268 | }; |
---|
1270 | 1269 | |
---|
1271 | 1270 | /************************************************** |
---|
.. | .. |
---|
1448 | 1447 | struct phy_device *phy_dev; |
---|
1449 | 1448 | int err; |
---|
1450 | 1449 | |
---|
1451 | | - phy_dev = fixed_phy_register(PHY_POLL, &fphy_status, -1, NULL); |
---|
| 1450 | + phy_dev = fixed_phy_register(PHY_POLL, &fphy_status, NULL); |
---|
1452 | 1451 | if (!phy_dev || IS_ERR(phy_dev)) { |
---|
1453 | 1452 | dev_err(bgmac->dev, "Failed to register fixed PHY device\n"); |
---|
1454 | 1453 | return -ENODEV; |
---|
.. | .. |
---|
1540 | 1539 | net_dev->hw_features = net_dev->features; |
---|
1541 | 1540 | net_dev->vlan_features = net_dev->features; |
---|
1542 | 1541 | |
---|
| 1542 | + /* Omit FCS from max MTU size */ |
---|
| 1543 | + net_dev->max_mtu = BGMAC_RX_MAX_FRAME_SIZE - ETH_FCS_LEN; |
---|
| 1544 | + |
---|
1543 | 1545 | err = register_netdev(bgmac->net_dev); |
---|
1544 | 1546 | if (err) { |
---|
1545 | 1547 | dev_err(bgmac->dev, "Cannot register net device\n"); |
---|
.. | .. |
---|
1566 | 1568 | phy_disconnect(bgmac->net_dev->phydev); |
---|
1567 | 1569 | netif_napi_del(&bgmac->napi); |
---|
1568 | 1570 | bgmac_dma_free(bgmac); |
---|
1569 | | - free_netdev(bgmac->net_dev); |
---|
1570 | 1571 | } |
---|
1571 | 1572 | EXPORT_SYMBOL_GPL(bgmac_enet_remove); |
---|
1572 | 1573 | |
---|