gianfar: Remove legacy PM callbacks
[safe/jmp/linux-2.6] / drivers / net / ibm_newemac / core.c
index c6591cb..2484e9e 100644 (file)
@@ -24,6 +24,7 @@
  *
  */
 
+#include <linux/module.h>
 #include <linux/sched.h>
 #include <linux/string.h>
 #include <linux/errno.h>
@@ -38,6 +39,7 @@
 #include <linux/bitops.h>
 #include <linux/workqueue.h>
 #include <linux/of.h>
+#include <linux/slab.h>
 
 #include <asm/processor.h>
 #include <asm/io.h>
@@ -387,18 +389,19 @@ static void emac_hash_mc(struct emac_instance *dev)
        const int regs = EMAC_XAHT_REGS(dev);
        u32 *gaht_base = emac_gaht_base(dev);
        u32 gaht_temp[regs];
-       struct dev_mc_list *dmi;
+       struct netdev_hw_addr *ha;
        int i;
 
-       DBG(dev, "hash_mc %d" NL, dev->ndev->mc_count);
+       DBG(dev, "hash_mc %d" NL, netdev_mc_count(dev->ndev));
 
        memset(gaht_temp, 0, sizeof (gaht_temp));
 
-       for (dmi = dev->ndev->mc_list; dmi; dmi = dmi->next) {
+       netdev_for_each_mc_addr(ha, dev->ndev) {
                int slot, reg, mask;
-               DBG2(dev, "mc %pM" NL, dmi->dmi_addr);
+               DBG2(dev, "mc %pM" NL, ha->addr);
 
-               slot = EMAC_XAHT_CRC_TO_SLOT(dev, ether_crc(ETH_ALEN, dmi->dmi_addr));
+               slot = EMAC_XAHT_CRC_TO_SLOT(dev,
+                                            ether_crc(ETH_ALEN, ha->addr));
                reg = EMAC_XAHT_SLOT_TO_REG(dev, slot);
                mask = EMAC_XAHT_SLOT_TO_MASK(dev, slot);
 
@@ -424,9 +427,9 @@ static inline u32 emac_iff2rmr(struct net_device *ndev)
        if (ndev->flags & IFF_PROMISC)
                r |= EMAC_RMR_PME;
        else if (ndev->flags & IFF_ALLMULTI ||
-                        (ndev->mc_count > EMAC_XAHT_SLOTS(dev)))
+                        (netdev_mc_count(ndev) > EMAC_XAHT_SLOTS(dev)))
                r |= EMAC_RMR_PMME;
-       else if (ndev->mc_count > 0)
+       else if (!netdev_mc_empty(ndev))
                r |= EMAC_RMR_MAE;
 
        return r;
@@ -1175,7 +1178,7 @@ static int emac_open(struct net_device *ndev)
                netif_carrier_on(dev->ndev);
 
        /* Required for Pause packet support in EMAC */
-       dev_mc_add(ndev, default_mcast_addr, sizeof(default_mcast_addr), 1);
+       dev_mc_add_global(ndev, default_mcast_addr);
 
        emac_configure(dev);
        mal_poll_add(dev->mal, &dev->commac);
@@ -1698,7 +1701,6 @@ static int emac_poll_rx(void *param, int budget)
 
                skb_put(skb, len);
        push_packet:
-               skb->dev = dev->ndev;
                skb->protocol = eth_type_trans(skb, dev->ndev);
                emac_rx_csum(dev, skb, ctrl);
 
@@ -1975,27 +1977,27 @@ static int emac_ethtool_set_settings(struct net_device *ndev,
        if (cmd->autoneg == AUTONEG_DISABLE) {
                switch (cmd->speed) {
                case SPEED_10:
-                       if (cmd->duplex == DUPLEX_HALF
-                           && !(f & SUPPORTED_10baseT_Half))
+                       if (cmd->duplex == DUPLEX_HALF &&
+                           !(f & SUPPORTED_10baseT_Half))
                                return -EINVAL;
-                       if (cmd->duplex == DUPLEX_FULL
-                           && !(f & SUPPORTED_10baseT_Full))
+                       if (cmd->duplex == DUPLEX_FULL &&
+                           !(f & SUPPORTED_10baseT_Full))
                                return -EINVAL;
                        break;
                case SPEED_100:
-                       if (cmd->duplex == DUPLEX_HALF
-                           && !(f & SUPPORTED_100baseT_Half))
+                       if (cmd->duplex == DUPLEX_HALF &&
+                           !(f & SUPPORTED_100baseT_Half))
                                return -EINVAL;
-                       if (cmd->duplex == DUPLEX_FULL
-                           && !(f & SUPPORTED_100baseT_Full))
+                       if (cmd->duplex == DUPLEX_FULL &&
+                           !(f & SUPPORTED_100baseT_Full))
                                return -EINVAL;
                        break;
                case SPEED_1000:
-                       if (cmd->duplex == DUPLEX_HALF
-                           && !(f & SUPPORTED_1000baseT_Half))
+                       if (cmd->duplex == DUPLEX_HALF &&
+                           !(f & SUPPORTED_1000baseT_Half))
                                return -EINVAL;
-                       if (cmd->duplex == DUPLEX_FULL
-                           && !(f & SUPPORTED_1000baseT_Full))
+                       if (cmd->duplex == DUPLEX_FULL &&
+                           !(f & SUPPORTED_1000baseT_Full))
                                return -EINVAL;
                        break;
                default:
@@ -2148,9 +2150,12 @@ static int emac_ethtool_nway_reset(struct net_device *ndev)
        return res;
 }
 
-static int emac_ethtool_get_stats_count(struct net_device *ndev)
+static int emac_ethtool_get_sset_count(struct net_device *ndev, int stringset)
 {
-       return EMAC_ETHTOOL_STATS_COUNT;
+       if (stringset == ETH_SS_STATS)
+               return EMAC_ETHTOOL_STATS_COUNT;
+       else
+               return -EINVAL;
 }
 
 static void emac_ethtool_get_strings(struct net_device *ndev, u32 stringset,
@@ -2181,7 +2186,6 @@ static void emac_ethtool_get_drvinfo(struct net_device *ndev,
        info->fw_version[0] = '\0';
        sprintf(info->bus_info, "PPC 4xx EMAC-%d %s",
                dev->cell_index, dev->ofdev->node->full_name);
-       info->n_stats = emac_ethtool_get_stats_count(ndev);
        info->regdump_len = emac_ethtool_get_regs_len(ndev);
 }
 
@@ -2201,7 +2205,7 @@ static const struct ethtool_ops emac_ethtool_ops = {
        .get_rx_csum = emac_ethtool_get_rx_csum,
 
        .get_strings = emac_ethtool_get_strings,
-       .get_stats_count = emac_ethtool_get_stats_count,
+       .get_sset_count = emac_ethtool_get_sset_count,
        .get_ethtool_stats = emac_ethtool_get_ethtool_stats,
 
        .get_link = ethtool_op_get_link,
@@ -2988,6 +2992,7 @@ static struct of_device_id emac_match[] =
        },
        {},
 };
+MODULE_DEVICE_TABLE(of, emac_match);
 
 static struct of_platform_driver emac_driver = {
        .name = "emac",