]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/infiniband/hw/nes/nes_nic.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
[linux-2.6-omap-h63xx.git] / drivers / infiniband / hw / nes / nes_nic.c
index 025ed9f7d9c2ff92fe45eea0f4ffd120ddc2f558..8d3e4c6f237eb8b341c681557d9c07e90fe0a5f5 100644 (file)
@@ -111,7 +111,7 @@ static int nes_netdev_poll(struct napi_struct *napi, int budget)
        nes_nic_ce_handler(nesdev, nescq);
 
        if (nescq->cqes_pending == 0) {
-               netif_rx_complete(napi);
+               napi_complete(napi);
                /* clear out completed cqes and arm */
                nes_write32(nesdev->regs+NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT |
                                nescq->cq_number | (nescq->cqe_allocs_pending << 16));
@@ -1551,6 +1551,19 @@ static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct vlan_g
        spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
 }
 
+static const struct net_device_ops nes_netdev_ops = {
+       .ndo_open               = nes_netdev_open,
+       .ndo_stop               = nes_netdev_stop,
+       .ndo_start_xmit         = nes_netdev_start_xmit,
+       .ndo_get_stats          = nes_netdev_get_stats,
+       .ndo_tx_timeout         = nes_netdev_tx_timeout,
+       .ndo_set_mac_address    = nes_netdev_set_mac_address,
+       .ndo_set_multicast_list = nes_netdev_set_multicast_list,
+       .ndo_change_mtu         = nes_netdev_change_mtu,
+       .ndo_set_mac_address    = eth_mac_addr,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_vlan_rx_register   = nes_netdev_vlan_rx_register,
+};
 
 /**
  * nes_netdev_init - initialize network device
@@ -1559,7 +1572,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
                void __iomem *mmio_addr)
 {
        u64 u64temp;
-       struct nes_vnic *nesvnic = NULL;
+       struct nes_vnic *nesvnic;
        struct net_device *netdev;
        struct nic_qp_map *curr_qp_map;
        u32 u32temp;
@@ -1571,22 +1584,12 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
                printk(KERN_ERR PFX "nesvnic etherdev alloc failed");
                return NULL;
        }
+       nesvnic = netdev_priv(netdev);
 
        nes_debug(NES_DBG_INIT, "netdev = %p, %s\n", netdev, netdev->name);
 
        SET_NETDEV_DEV(netdev, &nesdev->pcidev->dev);
 
-       nesvnic = netdev_priv(netdev);
-       memset(nesvnic, 0, sizeof(*nesvnic));
-
-       netdev->open = nes_netdev_open;
-       netdev->stop = nes_netdev_stop;
-       netdev->hard_start_xmit = nes_netdev_start_xmit;
-       netdev->get_stats = nes_netdev_get_stats;
-       netdev->tx_timeout = nes_netdev_tx_timeout;
-       netdev->set_mac_address = nes_netdev_set_mac_address;
-       netdev->set_multicast_list = nes_netdev_set_multicast_list;
-       netdev->change_mtu = nes_netdev_change_mtu;
        netdev->watchdog_timeo = NES_TX_TIMEOUT;
        netdev->irq = nesdev->pcidev->irq;
        netdev->mtu = ETH_DATA_LEN;
@@ -1594,11 +1597,13 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
        netdev->addr_len = ETH_ALEN;
        netdev->type = ARPHRD_ETHER;
        netdev->features = NETIF_F_HIGHDMA;
+       netdev->netdev_ops = &nes_netdev_ops;
        netdev->ethtool_ops = &nes_ethtool_ops;
        netif_napi_add(netdev, &nesvnic->napi, nes_netdev_poll, 128);
        nes_debug(NES_DBG_INIT, "Enabling VLAN Insert/Delete.\n");
        netdev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
        netdev->vlan_rx_register = nes_netdev_vlan_rx_register;
+       netdev->features |= NETIF_F_LLTX;
 
        /* Fill in the port structure */
        nesvnic->netdev = netdev;