Changeset 27041


Ignore:
Timestamp:
2011-06-01T00:53:10+02:00 (7 years ago)
Author:
juhosg
Message:

ar71xx: ag71xx: make ring sizes configurable via ethtool

Location:
trunk/target/linux/ar71xx/files/drivers/net/ag71xx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h

    r27040 r27041  
    5757#define AG71XX_TX_RING_SIZE_DEFAULT     64 
    5858#define AG71XX_RX_RING_SIZE_DEFAULT     128 
     59 
     60#define AG71XX_TX_RING_SIZE_MAX         256 
     61#define AG71XX_RX_RING_SIZE_MAX         256 
    5962 
    6063#ifdef CONFIG_AG71XX_DEBUG 
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ethtool.c

    r19031 r27041  
    6262} 
    6363 
     64static void ag71xx_ethtool_get_ringparam(struct net_device *dev, 
     65                                         struct ethtool_ringparam *er) 
     66{ 
     67        struct ag71xx *ag = netdev_priv(dev); 
     68 
     69        er->tx_max_pending = AG71XX_TX_RING_SIZE_MAX; 
     70        er->rx_max_pending = AG71XX_RX_RING_SIZE_MAX; 
     71        er->rx_mini_max_pending = 0; 
     72        er->rx_jumbo_max_pending = 0; 
     73 
     74        er->tx_pending = ag->tx_ring.size; 
     75        er->rx_pending = ag->rx_ring.size; 
     76        er->rx_mini_pending = 0; 
     77        er->rx_jumbo_pending = 0; 
     78} 
     79 
     80static int ag71xx_ethtool_set_ringparam(struct net_device *dev, 
     81                                        struct ethtool_ringparam *er) 
     82{ 
     83        struct ag71xx *ag = netdev_priv(dev); 
     84        unsigned tx_size; 
     85        unsigned rx_size; 
     86        int err; 
     87 
     88        if (er->rx_mini_pending != 0|| 
     89            er->rx_jumbo_pending != 0 || 
     90            er->rx_pending == 0 || 
     91            er->tx_pending == 0) 
     92                return -EINVAL; 
     93 
     94        tx_size = er->tx_pending < AG71XX_TX_RING_SIZE_MAX ? 
     95                  er->tx_pending : AG71XX_TX_RING_SIZE_MAX; 
     96 
     97        rx_size = er->rx_pending < AG71XX_RX_RING_SIZE_MAX ? 
     98                  er->rx_pending : AG71XX_RX_RING_SIZE_MAX; 
     99 
     100        if (netif_running(dev)) { 
     101                err = dev->netdev_ops->ndo_stop(dev); 
     102                if (err) 
     103                        return err; 
     104        } 
     105 
     106        ag->tx_ring.size = tx_size; 
     107        ag->rx_ring.size = rx_size; 
     108 
     109        if (netif_running(dev)) 
     110                err = dev->netdev_ops->ndo_open(dev); 
     111 
     112        return err; 
     113} 
     114 
    64115struct ethtool_ops ag71xx_ethtool_ops = { 
    65116        .set_settings   = ag71xx_ethtool_set_settings, 
     
    68119        .get_msglevel   = ag71xx_ethtool_get_msglevel, 
    69120        .set_msglevel   = ag71xx_ethtool_set_msglevel, 
     121        .get_ringparam  = ag71xx_ethtool_get_ringparam, 
     122        .set_ringparam  = ag71xx_ethtool_set_ringparam, 
    70123        .get_link       = ethtool_op_get_link, 
    71124}; 
Note: See TracChangeset for help on using the changeset viewer.