Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
David S. Miller [Thu, 8 Jan 2009 19:05:59 +0000 (11:05 -0800)]
1  2 
drivers/ieee1394/eth1394.c
drivers/ieee1394/eth1394.h
drivers/misc/sgi-xp/xpnet.c
drivers/net/Kconfig
drivers/s390/net/qeth_l2_main.c
drivers/s390/net/qeth_l3_main.c
firmware/Makefile

@@@ -92,7 -92,7 +92,7 @@@ struct partial_datagram 
        struct list_head list;
        u16 dgl;
        u16 dg_size;
-       u16 ether_type;
+       __be16 ether_type;
        struct sk_buff *skb;
        char *pbuf;
        struct list_head frag_info;
@@@ -181,7 -181,7 +181,7 @@@ static void ether1394_remove_host(struc
  static void ether1394_host_reset(struct hpsb_host *host);
  
  /* Function for incoming 1394 packets */
- static struct hpsb_address_ops addr_ops = {
+ const static struct hpsb_address_ops addr_ops = {
        .write =        ether1394_write,
  };
  
@@@ -245,6 -245,12 +245,6 @@@ static int ether1394_stop(struct net_de
        return 0;
  }
  
 -/* Return statistics to the caller */
 -static struct net_device_stats *ether1394_stats(struct net_device *dev)
 -{
 -      return &(((struct eth1394_priv *)netdev_priv(dev))->stats);
 -}
 -
  /* FIXME: What to do if we timeout? I think a host reset is probably in order,
   * so that's what we do. Should we increment the stat counters too?  */
  static void ether1394_tx_timeout(struct net_device *dev)
@@@ -510,19 -516,16 +510,19 @@@ static const struct header_ops ether139
        .parse          = ether1394_header_parse,
  };
  
 +static const struct net_device_ops ether1394_netdev_ops = {
 +      .ndo_open       = ether1394_open,
 +      .ndo_stop       = ether1394_stop,
 +      .ndo_start_xmit = ether1394_tx,
 +      .ndo_tx_timeout = ether1394_tx_timeout,
 +      .ndo_change_mtu = ether1394_change_mtu,
 +};
 +
  static void ether1394_init_dev(struct net_device *dev)
  {
 -      dev->open               = ether1394_open;
 -      dev->stop               = ether1394_stop;
 -      dev->hard_start_xmit    = ether1394_tx;
 -      dev->get_stats          = ether1394_stats;
 -      dev->tx_timeout         = ether1394_tx_timeout;
 -      dev->change_mtu         = ether1394_change_mtu;
  
        dev->header_ops         = &ether1394_header_ops;
 +      dev->netdev_ops         = &ether1394_netdev_ops;
  
        SET_ETHTOOL_OPS(dev, &ethtool_ops);
  
@@@ -764,7 -767,7 +764,7 @@@ static int ether1394_header_parse(cons
  static int ether1394_header_cache(const struct neighbour *neigh,
                                  struct hh_cache *hh)
  {
-       unsigned short type = hh->hh_type;
+       __be16 type = hh->hh_type;
        struct net_device *dev = neigh->dev;
        struct eth1394hdr *eth =
                (struct eth1394hdr *)((u8 *)hh->hh_data + 16 - ETH1394_HLEN);
@@@ -792,7 -795,7 +792,7 @@@ static void ether1394_header_cache_upda
   ******************************************/
  
  /* Copied from net/ethernet/eth.c */
- static u16 ether1394_type_trans(struct sk_buff *skb, struct net_device *dev)
+ static __be16 ether1394_type_trans(struct sk_buff *skb, struct net_device *dev)
  {
        struct eth1394hdr *eth;
        unsigned char *rawp;
  
  /* Parse an encapsulated IP1394 header into an ethernet frame packet.
   * We also perform ARP translation here, if need be.  */
- static u16 ether1394_parse_encap(struct sk_buff *skb, struct net_device *dev,
+ static __be16 ether1394_parse_encap(struct sk_buff *skb, struct net_device *dev,
                                 nodeid_t srcid, nodeid_t destid,
-                                u16 ether_type)
+                                __be16 ether_type)
  {
        struct eth1394_priv *priv = netdev_priv(dev);
-       u64 dest_hw;
-       unsigned short ret = 0;
+       __be64 dest_hw;
+       __be16 ret = 0;
  
        /* Setup our hw addresses. We use these to build the ethernet header. */
        if (destid == (LOCAL_BUS | ALL_NODES))
-               dest_hw = ~0ULL;  /* broadcast */
+               dest_hw = ~cpu_to_be64(0);  /* broadcast */
        else
                dest_hw = cpu_to_be64((u64)priv->host->csr.guid_hi << 32 |
                                      priv->host->csr.guid_lo);
                node = eth1394_find_node_guid(&priv->ip_node_list,
                                              be64_to_cpu(guid));
                if (!node)
-                       return 0;
+                       return cpu_to_be16(0);
  
                node_info =
                    (struct eth1394_node_info *)node->ud->device.driver_data;
@@@ -1060,7 -1063,7 +1060,7 @@@ static int ether1394_data_handler(struc
        unsigned long flags;
        struct eth1394_priv *priv = netdev_priv(dev);
        union eth1394_hdr *hdr = (union eth1394_hdr *)buf;
-       u16 ether_type = 0;  /* initialized to clear warning */
+       __be16 ether_type = cpu_to_be16(0);  /* initialized to clear warning */
        int hdr_len;
        struct unit_directory *ud = priv->ud_list[NODEID_TO_NODE(srcid)];
        struct eth1394_node_info *node_info;
                        HPSB_PRINT(KERN_ERR, "ether1394 rx: sender nodeid "
                                   "lookup failure: " NODE_BUS_FMT,
                                   NODE_BUS_ARGS(priv->host, srcid));
 -                      priv->stats.rx_dropped++;
 +                      dev->stats.rx_dropped++;
                        return -1;
                }
                ud = node->ud;
                skb = dev_alloc_skb(len + dev->hard_header_len + 15);
                if (unlikely(!skb)) {
                        ETH1394_PRINT_G(KERN_ERR, "Out of memory\n");
 -                      priv->stats.rx_dropped++;
 +                      dev->stats.rx_dropped++;
                        return -1;
                }
                skb_reserve(skb, (dev->hard_header_len + 15) & ~15);
        spin_lock_irqsave(&priv->lock, flags);
  
        if (!skb->protocol) {
 -              priv->stats.rx_errors++;
 -              priv->stats.rx_dropped++;
 +              dev->stats.rx_errors++;
 +              dev->stats.rx_dropped++;
                dev_kfree_skb_any(skb);
        } else if (netif_rx(skb) == NET_RX_DROP) {
 -              priv->stats.rx_errors++;
 -              priv->stats.rx_dropped++;
 +              dev->stats.rx_errors++;
 +              dev->stats.rx_dropped++;
        } else {
 -              priv->stats.rx_packets++;
 -              priv->stats.rx_bytes += skb->len;
 +              dev->stats.rx_packets++;
 +              dev->stats.rx_bytes += skb->len;
        }
  
        spin_unlock_irqrestore(&priv->lock, flags);
@@@ -1231,6 -1234,8 +1231,6 @@@ bad_proto
        if (netif_queue_stopped(dev))
                netif_wake_queue(dev);
  
 -      dev->last_rx = jiffies;
 -
        return 0;
  }
  
@@@ -1254,7 -1259,7 +1254,7 @@@ static int ether1394_write(struct hpsb_
  
  static void ether1394_iso(struct hpsb_iso *iso)
  {
-       quadlet_t *data;
+       __be32 *data;
        char *buf;
        struct eth1394_host_info *hi;
        struct net_device *dev;
        for (i = 0; i < nready; i++) {
                struct hpsb_iso_packet_info *info =
                        &iso->infos[(iso->first_packet + i) % iso->buf_packets];
-               data = (quadlet_t *)(iso->data_buf.kvirt + info->offset);
+               data = (__be32 *)(iso->data_buf.kvirt + info->offset);
  
                /* skip over GASP header */
                buf = (char *)data + 8;
@@@ -1504,18 -1509,17 +1504,18 @@@ static int ether1394_send_packet(struc
  static void ether1394_dg_complete(struct packet_task *ptask, int fail)
  {
        struct sk_buff *skb = ptask->skb;
 -      struct eth1394_priv *priv = netdev_priv(skb->dev);
 +      struct net_device *dev = skb->dev;
 +      struct eth1394_priv *priv = netdev_priv(dev);
        unsigned long flags;
  
        /* Statistics */
        spin_lock_irqsave(&priv->lock, flags);
        if (fail) {
 -              priv->stats.tx_dropped++;
 -              priv->stats.tx_errors++;
 +              dev->stats.tx_dropped++;
 +              dev->stats.tx_errors++;
        } else {
 -              priv->stats.tx_bytes += skb->len;
 -              priv->stats.tx_packets++;
 +              dev->stats.tx_bytes += skb->len;
 +              dev->stats.tx_packets++;
        }
        spin_unlock_irqrestore(&priv->lock, flags);
  
@@@ -1610,7 -1614,7 +1610,7 @@@ static int ether1394_tx(struct sk_buff 
                if (max_payload < dg_size + hdr_type_len[ETH1394_HDR_LF_UF])
                        priv->bc_dgl++;
        } else {
-               __be64 guid = get_unaligned((u64 *)hdr_buf.h_dest);
+               __be64 guid = get_unaligned((__be64 *)hdr_buf.h_dest);
  
                node = eth1394_find_node_guid(&priv->ip_node_list,
                                              be64_to_cpu(guid));
@@@ -1692,8 -1696,8 +1692,8 @@@ fail
                dev_kfree_skb(skb);
  
        spin_lock_irqsave(&priv->lock, flags);
 -      priv->stats.tx_dropped++;
 -      priv->stats.tx_errors++;
 +      dev->stats.tx_dropped++;
 +      dev->stats.tx_errors++;
        spin_unlock_irqrestore(&priv->lock, flags);
  
        /*
@@@ -54,6 -54,7 +54,6 @@@ enum eth1394_bc_states { ETHER1394_BC_E
  
  /* Private structure for our ethernet driver */
  struct eth1394_priv {
 -      struct net_device_stats stats;  /* Device stats                  */
        struct hpsb_host *host;         /* The card for this dev         */
        u16 bc_maxpayload;              /* Max broadcast payload         */
        u8 bc_sspd;                     /* Max broadcast speed           */
@@@ -81,7 -82,7 +81,7 @@@
  
  struct eth1394hdr {
        unsigned char   h_dest[ETH1394_ALEN];   /* destination eth1394 addr     */
-       unsigned short  h_proto;                /* packet type ID field */
+       __be16          h_proto;                /* packet type ID field */
  }  __attribute__((packed));
  
  static inline struct eth1394hdr *eth1394_hdr(const struct sk_buff *skb)
@@@ -98,13 -99,13 +98,13 @@@ typedef enum {ETH1394_GASP, ETH1394_WRR
  struct eth1394_uf_hdr {
        u16 lf:2;
        u16 res:14;
-       u16 ether_type;         /* Ethernet packet type */
+       __be16 ether_type;              /* Ethernet packet type */
  } __attribute__((packed));
  #elif defined __LITTLE_ENDIAN_BITFIELD
  struct eth1394_uf_hdr {
        u16 res:14;
        u16 lf:2;
-       u16 ether_type;
+       __be16 ether_type;
  } __attribute__((packed));
  #else
  #error Unknown bit field type
@@@ -116,7 -117,7 +116,7 @@@ struct eth1394_ff_hdr 
        u16 lf:2;
        u16 res1:2;
        u16 dg_size:12;         /* Datagram size */
-       u16 ether_type;         /* Ethernet packet type */
+       __be16 ether_type;              /* Ethernet packet type */
        u16 dgl;                /* Datagram label */
        u16 res2;
  } __attribute__((packed));
@@@ -125,7 -126,7 +125,7 @@@ struct eth1394_ff_hdr 
        u16 dg_size:12;
        u16 res1:2;
        u16 lf:2;
-       u16 ether_type;
+       __be16 ether_type;
        u16 dgl;
        u16 res2;
  } __attribute__((packed));
@@@ -206,11 -207,11 +206,11 @@@ struct eth1394_arp 
        u16 opcode;             /* ARP Opcode   */
        /* Above is exactly the same format as struct arphdr */
  
-       u64 s_uniq_id;          /* Sender's 64bit EUI                   */
+       __be64 s_uniq_id;       /* Sender's 64bit EUI           */
        u8 max_rec;             /* Sender's max packet size             */
        u8 sspd;                /* Sender's max speed                   */
-       u16 fifo_hi;            /* hi 16bits of sender's FIFO addr      */
-       u32 fifo_lo;            /* lo 32bits of sender's FIFO addr      */
+       __be16 fifo_hi;         /* hi 16bits of sender's FIFO addr      */
+       __be32 fifo_lo;         /* lo 32bits of sender's FIFO addr      */
        u32 sip;                /* Sender's IP Address                  */
        u32 tip;                /* IP Address of requested hw addr      */
  };
@@@ -95,6 -95,11 +95,6 @@@ struct xpnet_pending_msg 
        atomic_t use_count;
  };
  
 -/* driver specific structure pointed to by the device structure */
 -struct xpnet_dev_private {
 -      struct net_device_stats stats;
 -};
 -
  struct net_device *xpnet_device;
  
  /*
@@@ -133,7 -138,7 +133,7 @@@ struct device_driver xpnet_dbg_name = 
  };
  
  struct device xpnet_dbg_subname = {
-       .bus_id = {0},          /* set to "" */
+       .init_name = "",        /* set to "" */
        .driver = &xpnet_dbg_name
  };
  
@@@ -148,6 -153,7 +148,6 @@@ xpnet_receive(short partid, int channel
        struct sk_buff *skb;
        void *dst;
        enum xp_retval ret;
 -      struct xpnet_dev_private *priv = netdev_priv(xpnet_device);
  
        if (!XPNET_VALID_MSG(msg)) {
                /*
                 */
                xpc_received(partid, channel, (void *)msg);
  
 -              priv->stats.rx_errors++;
 +              xpnet_device->stats.rx_errors++;
  
                return;
        }
  
                xpc_received(partid, channel, (void *)msg);
  
 -              priv->stats.rx_errors++;
 +              xpnet_device->stats.rx_errors++;
  
                return;
        }
  
                        xpc_received(partid, channel, (void *)msg);
  
 -                      priv->stats.rx_errors++;
 +                      xpnet_device->stats.rx_errors++;
  
                        return;
                }
                skb_end_pointer(skb), skb->len);
  
        xpnet_device->last_rx = jiffies;
 -      priv->stats.rx_packets++;
 -      priv->stats.rx_bytes += skb->len + ETH_HLEN;
 +      xpnet_device->stats.rx_packets++;
 +      xpnet_device->stats.rx_bytes += skb->len + ETH_HLEN;
  
        netif_rx_ni(skb);
        xpc_received(partid, channel, (void *)msg);
@@@ -347,6 -353,26 +347,6 @@@ xpnet_dev_change_mtu(struct net_device 
  }
  
  /*
 - * Required for the net_device structure.
 - */
 -static int
 -xpnet_dev_set_config(struct net_device *dev, struct ifmap *new_map)
 -{
 -      return 0;
 -}
 -
 -/*
 - * Return statistics to the caller.
 - */
 -static struct net_device_stats *
 -xpnet_dev_get_stats(struct net_device *dev)
 -{
 -      struct xpnet_dev_private *priv = netdev_priv(dev);
 -
 -      return &priv->stats;
 -}
 -
 -/*
   * Notification that the other end has received the message and
   * DMA'd the skb information.  At this point, they are done with
   * our side.  When all recipients are done processing, we
@@@ -427,6 -453,7 +427,6 @@@ xpnet_dev_hard_start_xmit(struct sk_buf
        struct xpnet_pending_msg *queued_msg;
        u64 start_addr, end_addr;
        short dest_partid;
 -      struct xpnet_dev_private *priv = netdev_priv(dev);
        u16 embedded_bytes = 0;
  
        dev_dbg(xpnet, ">skb->head=0x%p skb->data=0x%p skb->tail=0x%p "
                dev_warn(xpnet, "failed to kmalloc %ld bytes; dropping "
                         "packet\n", sizeof(struct xpnet_pending_msg));
  
 -              priv->stats.tx_errors++;
 +              dev->stats.tx_errors++;
                return -ENOMEM;
        }
  
                kfree(queued_msg);
        }
  
 -      priv->stats.tx_packets++;
 -      priv->stats.tx_bytes += skb->len;
 +      dev->stats.tx_packets++;
 +      dev->stats.tx_bytes += skb->len;
  
        return 0;
  }
  static void
  xpnet_dev_tx_timeout(struct net_device *dev)
  {
 -      struct xpnet_dev_private *priv = netdev_priv(dev);
 -
 -      priv->stats.tx_errors++;
 -      return;
 +      dev->stats.tx_errors++;
  }
  
 +static const struct net_device_ops xpnet_netdev_ops = {
 +      .ndo_open               = xpnet_dev_open,
 +      .ndo_stop               = xpnet_dev_stop,
 +      .ndo_start_xmit         = xpnet_dev_hard_start_xmit,
 +      .ndo_change_mtu         = xpnet_dev_change_mtu,
 +      .ndo_tx_timeout         = xpnet_dev_tx_timeout,
 +      .ndo_set_mac_address    = eth_mac_addr,
 +      .ndo_validate_addr      = eth_validate_addr,
 +};
 +
  static int __init
  xpnet_init(void)
  {
         * use ether_setup() to init the majority of our device
         * structure and then override the necessary pieces.
         */
 -      xpnet_device = alloc_netdev(sizeof(struct xpnet_dev_private),
 -                                  XPNET_DEVICE_NAME, ether_setup);
 +      xpnet_device = alloc_netdev(0, XPNET_DEVICE_NAME, ether_setup);
        if (xpnet_device == NULL) {
                kfree(xpnet_broadcast_partitions);
                return -ENOMEM;
        netif_carrier_off(xpnet_device);
  
        xpnet_device->mtu = XPNET_DEF_MTU;
 -      xpnet_device->change_mtu = xpnet_dev_change_mtu;
 -      xpnet_device->open = xpnet_dev_open;
 -      xpnet_device->get_stats = xpnet_dev_get_stats;
 -      xpnet_device->stop = xpnet_dev_stop;
 -      xpnet_device->hard_start_xmit = xpnet_dev_hard_start_xmit;
 -      xpnet_device->tx_timeout = xpnet_dev_tx_timeout;
 -      xpnet_device->set_config = xpnet_dev_set_config;
  
        /*
         * Multicast assumes the LSB of the first octet is set for multicast
diff --combined drivers/net/Kconfig
@@@ -830,7 -830,7 +830,7 @@@ config ULTRA3
  
  config BFIN_MAC
        tristate "Blackfin on-chip MAC support"
 -      depends on NET_ETHERNET && (BF526 || BF527 || BF536 || BF537)
 +      depends on NET_ETHERNET && (BF516 || BF518 || BF526 || BF527 || BF536 || BF537)
        select CRC32
        select MII
        select PHYLIB
@@@ -2614,6 -2614,8 +2614,8 @@@ source "drivers/net/tokenring/Kconfig
  
  source "drivers/net/wireless/Kconfig"
  
+ source "drivers/net/wimax/Kconfig"
  source "drivers/net/usb/Kconfig"
  
  source "drivers/net/pcmcia/Kconfig"
@@@ -20,8 -20,6 +20,6 @@@
  #include <linux/mii.h>
  #include <linux/ip.h>
  
- #include <asm/s390_rdev.h>
  #include "qeth_core.h"
  #include "qeth_core_offl.h"
  
@@@ -918,21 -916,6 +916,21 @@@ static struct ethtool_ops qeth_l2_osn_o
        .get_drvinfo = qeth_core_get_drvinfo,
  };
  
 +static struct net_device_ops qeth_l2_netdev_ops = {
 +      .ndo_open               = qeth_l2_open,
 +      .ndo_stop               = qeth_l2_stop,
 +      .ndo_get_stats          = qeth_get_stats,
 +      .ndo_start_xmit         = qeth_l2_hard_start_xmit,
 +      .ndo_validate_addr      = eth_validate_addr,
 +      .ndo_set_multicast_list = qeth_l2_set_multicast_list,
 +      .ndo_do_ioctl           = qeth_l2_do_ioctl,
 +      .ndo_set_mac_address    = qeth_l2_set_mac_address,
 +      .ndo_change_mtu         = qeth_change_mtu,
 +      .ndo_vlan_rx_add_vid    = qeth_l2_vlan_rx_add_vid,
 +      .ndo_vlan_rx_kill_vid   = qeth_l2_vlan_rx_kill_vid,
 +      .ndo_tx_timeout         = qeth_tx_timeout,
 +};
 +
  static int qeth_l2_setup_netdev(struct qeth_card *card)
  {
        switch (card->info.type) {
                return -ENODEV;
  
        card->dev->ml_priv = card;
 -      card->dev->tx_timeout = &qeth_tx_timeout;
        card->dev->watchdog_timeo = QETH_TX_TIMEOUT;
 -      card->dev->open = qeth_l2_open;
 -      card->dev->stop = qeth_l2_stop;
 -      card->dev->hard_start_xmit = qeth_l2_hard_start_xmit;
 -      card->dev->do_ioctl = qeth_l2_do_ioctl;
 -      card->dev->get_stats = qeth_get_stats;
 -      card->dev->change_mtu = qeth_change_mtu;
 -      card->dev->set_multicast_list = qeth_l2_set_multicast_list;
 -      card->dev->vlan_rx_kill_vid = qeth_l2_vlan_rx_kill_vid;
 -      card->dev->vlan_rx_add_vid = qeth_l2_vlan_rx_add_vid;
 -      card->dev->set_mac_address = qeth_l2_set_mac_address;
        card->dev->mtu = card->info.initial_mtu;
 +      card->dev->netdev_ops = &qeth_l2_netdev_ops;
        if (card->info.type != QETH_CARD_TYPE_OSN)
                SET_ETHTOOL_OPS(card->dev, &qeth_l2_ethtool_ops);
        else
@@@ -26,8 -26,6 +26,6 @@@
  #include <net/ip.h>
  #include <net/arp.h>
  
- #include <asm/s390_rdev.h>
  #include "qeth_l3.h"
  #include "qeth_core_offl.h"
  
@@@ -1831,6 -1829,28 +1829,6 @@@ static void qeth_l3_vlan_rx_register(st
  
  static void qeth_l3_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
  {
 -      struct net_device *vlandev;
 -      struct qeth_card *card = dev->ml_priv;
 -      struct in_device *in_dev;
 -
 -      if (card->info.type == QETH_CARD_TYPE_IQD)
 -              return;
 -
 -      vlandev = vlan_group_get_device(card->vlangrp, vid);
 -      vlandev->neigh_setup = qeth_l3_neigh_setup;
 -
 -      in_dev = in_dev_get(vlandev);
 -#ifdef CONFIG_SYSCTL
 -      neigh_sysctl_unregister(in_dev->arp_parms);
 -#endif
 -      neigh_parms_release(&arp_tbl, in_dev->arp_parms);
 -
 -      in_dev->arp_parms = neigh_parms_alloc(vlandev, &arp_tbl);
 -#ifdef CONFIG_SYSCTL
 -      neigh_sysctl_register(vlandev, in_dev->arp_parms, NET_IPV4,
 -                            NET_IPV4_NEIGH, "ipv4", NULL, NULL);
 -#endif
 -      in_dev_put(in_dev);
        return;
  }
  
@@@ -2896,21 -2916,6 +2894,21 @@@ qeth_l3_neigh_setup(struct net_device *
        return 0;
  }
  
 +static struct net_device_ops qeth_l3_netdev_ops = {
 +      .ndo_open               = qeth_l3_open,
 +      .ndo_stop               = qeth_l3_stop,
 +      .ndo_get_stats          = qeth_get_stats,
 +      .ndo_start_xmit         = qeth_l3_hard_start_xmit,
 +      .ndo_validate_addr      = eth_validate_addr,
 +      .ndo_set_multicast_list = qeth_l3_set_multicast_list,
 +      .ndo_do_ioctl           = qeth_l3_do_ioctl,
 +      .ndo_change_mtu         = qeth_change_mtu,
 +      .ndo_vlan_rx_register   = qeth_l3_vlan_rx_register,
 +      .ndo_vlan_rx_add_vid    = qeth_l3_vlan_rx_add_vid,
 +      .ndo_vlan_rx_kill_vid   = qeth_l3_vlan_rx_kill_vid,
 +      .ndo_tx_timeout         = qeth_tx_timeout,
 +};
 +
  static int qeth_l3_setup_netdev(struct qeth_card *card)
  {
        if (card->info.type == QETH_CARD_TYPE_OSAE) {
                        card->dev = alloc_etherdev(0);
                        if (!card->dev)
                                return -ENODEV;
 -                      card->dev->neigh_setup = qeth_l3_neigh_setup;
 +                      qeth_l3_netdev_ops.ndo_neigh_setup =
 +                              qeth_l3_neigh_setup;
  
                        /*IPv6 address autoconfiguration stuff*/
                        qeth_l3_get_unique_id(card);
        } else
                return -ENODEV;
  
 -      card->dev->hard_start_xmit = qeth_l3_hard_start_xmit;
        card->dev->ml_priv = card;
 -      card->dev->tx_timeout = &qeth_tx_timeout;
        card->dev->watchdog_timeo = QETH_TX_TIMEOUT;
 -      card->dev->open = qeth_l3_open;
 -      card->dev->stop = qeth_l3_stop;
 -      card->dev->do_ioctl = qeth_l3_do_ioctl;
 -      card->dev->get_stats = qeth_get_stats;
 -      card->dev->change_mtu = qeth_change_mtu;
 -      card->dev->set_multicast_list = qeth_l3_set_multicast_list;
 -      card->dev->vlan_rx_register = qeth_l3_vlan_rx_register;
 -      card->dev->vlan_rx_add_vid = qeth_l3_vlan_rx_add_vid;
 -      card->dev->vlan_rx_kill_vid = qeth_l3_vlan_rx_kill_vid;
        card->dev->mtu = card->info.initial_mtu;
 -      card->dev->set_mac_address = NULL;
 +      card->dev->netdev_ops = &qeth_l3_netdev_ops;
        SET_ETHTOOL_OPS(card->dev, &qeth_l3_ethtool_ops);
        card->dev->features |=  NETIF_F_HW_VLAN_TX |
                                NETIF_F_HW_VLAN_RX |
diff --combined firmware/Makefile
@@@ -37,8 -37,6 +37,8 @@@ fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb
                                   cxgb3/t3c_psram-1.1.0.bin \
                                   cxgb3/t3fw-7.0.0.bin
  fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
 +fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
 +                           e100/d102e_ucode.bin
  fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin
  fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp
  fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \
@@@ -101,10 -99,10 +101,10 @@@ quiet_cmd_ihex  = IHEX    $
        cmd_ihex  = $(OBJCOPY) -Iihex -Obinary $< $@
  
  quiet_cmd_ihex2fw  = IHEX2FW $@
-       cmd_ihex2fw  = $(objtree)/$(obj)/ihex2fw $< $@
+       cmd_ihex2fw  = $(objtree)/scripts/ihex2fw $< $@
  
  quiet_cmd_h16tofw  = H16TOFW $@
-       cmd_h16tofw  = $(objtree)/$(obj)/ihex2fw -w $< $@
+       cmd_h16tofw  = $(objtree)/scripts/ihex2fw -w $< $@
  
  quiet_cmd_fwbin = MK_FW   $@
        cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)";              \
@@@ -167,11 -165,11 +167,11 @@@ $(obj)/%: $(obj)/%.ihex | $(objtree)/$(
  # is actually meaningful, because the firmware has to be loaded in a certain
  # order rather than as a single binary blob. Thus, we convert them into our
  # more compact binary representation of ihex records (<linux/ihex.h>)
- $(obj)/%.fw: $(obj)/%.HEX $(obj)/ihex2fw | $(objtree)/$(obj)/$$(dir %)
+ $(obj)/%.fw: $(obj)/%.HEX  | $(objtree)/$(obj)/$$(dir %)
        $(call cmd,ihex2fw)
  
  # .H16 is our own modified form of Intel HEX, with 16-bit length for records.
- $(obj)/%.fw: $(obj)/%.H16 $(obj)/ihex2fw | $(objtree)/$(obj)/$$(dir %)
+ $(obj)/%.fw: $(obj)/%.H16 | $(objtree)/$(obj)/$$(dir %)
        $(call cmd,h16tofw)
  
  $(firmware-dirs):
@@@ -188,5 -186,3 +188,3 @@@ targets := $(fw-shipped-) $(patsubst $(
  # Without this, built-in.o won't be created when it's empty, and the
  # final vmlinux link will fail.
  obj-n := dummy
- hostprogs-y := ihex2fw