diff options
Diffstat (limited to 'drivers/net/ethernet/socionext/sni_ave.c')
| -rw-r--r-- | drivers/net/ethernet/socionext/sni_ave.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/net/ethernet/socionext/sni_ave.c b/drivers/net/ethernet/socionext/sni_ave.c index 6732f5cbde08..7c7cd9d94bcc 100644 --- a/drivers/net/ethernet/socionext/sni_ave.c +++ b/drivers/net/ethernet/socionext/sni_ave.c | |||
| @@ -185,8 +185,8 @@ | |||
| 185 | NETIF_MSG_TX_ERR) | 185 | NETIF_MSG_TX_ERR) |
| 186 | 186 | ||
| 187 | /* Parameter for descriptor */ | 187 | /* Parameter for descriptor */ |
| 188 | #define AVE_NR_TXDESC 32 /* Tx descriptor */ | 188 | #define AVE_NR_TXDESC 64 /* Tx descriptor */ |
| 189 | #define AVE_NR_RXDESC 64 /* Rx descriptor */ | 189 | #define AVE_NR_RXDESC 256 /* Rx descriptor */ |
| 190 | 190 | ||
| 191 | #define AVE_DESC_OFS_CMDSTS 0 | 191 | #define AVE_DESC_OFS_CMDSTS 0 |
| 192 | #define AVE_DESC_OFS_ADDRL 4 | 192 | #define AVE_DESC_OFS_ADDRL 4 |
| @@ -194,6 +194,7 @@ | |||
| 194 | 194 | ||
| 195 | /* Parameter for ethernet frame */ | 195 | /* Parameter for ethernet frame */ |
| 196 | #define AVE_MAX_ETHFRAME 1518 | 196 | #define AVE_MAX_ETHFRAME 1518 |
| 197 | #define AVE_FRAME_HEADROOM 2 | ||
| 197 | 198 | ||
| 198 | /* Parameter for interrupt */ | 199 | /* Parameter for interrupt */ |
| 199 | #define AVE_INTM_COUNT 20 | 200 | #define AVE_INTM_COUNT 20 |
| @@ -576,12 +577,13 @@ static int ave_rxdesc_prepare(struct net_device *ndev, int entry) | |||
| 576 | 577 | ||
| 577 | skb = priv->rx.desc[entry].skbs; | 578 | skb = priv->rx.desc[entry].skbs; |
| 578 | if (!skb) { | 579 | if (!skb) { |
| 579 | skb = netdev_alloc_skb_ip_align(ndev, | 580 | skb = netdev_alloc_skb(ndev, AVE_MAX_ETHFRAME); |
| 580 | AVE_MAX_ETHFRAME); | ||
| 581 | if (!skb) { | 581 | if (!skb) { |
| 582 | netdev_err(ndev, "can't allocate skb for Rx\n"); | 582 | netdev_err(ndev, "can't allocate skb for Rx\n"); |
| 583 | return -ENOMEM; | 583 | return -ENOMEM; |
| 584 | } | 584 | } |
| 585 | skb->data += AVE_FRAME_HEADROOM; | ||
| 586 | skb->tail += AVE_FRAME_HEADROOM; | ||
| 585 | } | 587 | } |
| 586 | 588 | ||
| 587 | /* set disable to cmdsts */ | 589 | /* set disable to cmdsts */ |
| @@ -594,12 +596,12 @@ static int ave_rxdesc_prepare(struct net_device *ndev, int entry) | |||
| 594 | * - Rx buffer begins with 2 byte headroom, and data will be put from | 596 | * - Rx buffer begins with 2 byte headroom, and data will be put from |
| 595 | * (buffer + 2). | 597 | * (buffer + 2). |
| 596 | * To satisfy this, specify the address to put back the buffer | 598 | * To satisfy this, specify the address to put back the buffer |
| 597 | * pointer advanced by NET_IP_ALIGN by netdev_alloc_skb_ip_align(), | 599 | * pointer advanced by AVE_FRAME_HEADROOM, and expand the map size |
| 598 | * and expand the map size by NET_IP_ALIGN. | 600 | * by AVE_FRAME_HEADROOM. |
| 599 | */ | 601 | */ |
| 600 | ret = ave_dma_map(ndev, &priv->rx.desc[entry], | 602 | ret = ave_dma_map(ndev, &priv->rx.desc[entry], |
| 601 | skb->data - NET_IP_ALIGN, | 603 | skb->data - AVE_FRAME_HEADROOM, |
| 602 | AVE_MAX_ETHFRAME + NET_IP_ALIGN, | 604 | AVE_MAX_ETHFRAME + AVE_FRAME_HEADROOM, |
| 603 | DMA_FROM_DEVICE, &paddr); | 605 | DMA_FROM_DEVICE, &paddr); |
| 604 | if (ret) { | 606 | if (ret) { |
| 605 | netdev_err(ndev, "can't map skb for Rx\n"); | 607 | netdev_err(ndev, "can't map skb for Rx\n"); |
| @@ -1689,9 +1691,10 @@ static int ave_probe(struct platform_device *pdev) | |||
| 1689 | pdev->name, pdev->id); | 1691 | pdev->name, pdev->id); |
| 1690 | 1692 | ||
| 1691 | /* Register as a NAPI supported driver */ | 1693 | /* Register as a NAPI supported driver */ |
| 1692 | netif_napi_add(ndev, &priv->napi_rx, ave_napi_poll_rx, priv->rx.ndesc); | 1694 | netif_napi_add(ndev, &priv->napi_rx, ave_napi_poll_rx, |
| 1695 | NAPI_POLL_WEIGHT); | ||
| 1693 | netif_tx_napi_add(ndev, &priv->napi_tx, ave_napi_poll_tx, | 1696 | netif_tx_napi_add(ndev, &priv->napi_tx, ave_napi_poll_tx, |
| 1694 | priv->tx.ndesc); | 1697 | NAPI_POLL_WEIGHT); |
| 1695 | 1698 | ||
| 1696 | platform_set_drvdata(pdev, ndev); | 1699 | platform_set_drvdata(pdev, ndev); |
| 1697 | 1700 | ||
| @@ -1913,5 +1916,6 @@ static struct platform_driver ave_driver = { | |||
| 1913 | }; | 1916 | }; |
| 1914 | module_platform_driver(ave_driver); | 1917 | module_platform_driver(ave_driver); |
| 1915 | 1918 | ||
| 1919 | MODULE_AUTHOR("Kunihiko Hayashi <hayashi.kunihiko@socionext.com>"); | ||
| 1916 | MODULE_DESCRIPTION("Socionext UniPhier AVE ethernet driver"); | 1920 | MODULE_DESCRIPTION("Socionext UniPhier AVE ethernet driver"); |
| 1917 | MODULE_LICENSE("GPL v2"); | 1921 | MODULE_LICENSE("GPL v2"); |
