|
@@ -1433,12 +1433,28 @@ static void efx_set_multicast_list(struct net_device *net_dev)
|
|
|
falcon_set_multicast_hash(efx);
|
|
|
}
|
|
|
|
|
|
+static const struct net_device_ops efx_netdev_ops = {
|
|
|
+ .ndo_open = efx_net_open,
|
|
|
+ .ndo_stop = efx_net_stop,
|
|
|
+ .ndo_get_stats = efx_net_stats,
|
|
|
+ .ndo_tx_timeout = efx_watchdog,
|
|
|
+ .ndo_start_xmit = efx_hard_start_xmit,
|
|
|
+ .ndo_validate_addr = eth_validate_addr,
|
|
|
+ .ndo_do_ioctl = efx_ioctl,
|
|
|
+ .ndo_change_mtu = efx_change_mtu,
|
|
|
+ .ndo_set_mac_address = efx_set_mac_address,
|
|
|
+ .ndo_set_multicast_list = efx_set_multicast_list,
|
|
|
+#ifdef CONFIG_NET_POLL_CONTROLLER
|
|
|
+ .ndo_poll_controller = efx_netpoll,
|
|
|
+#endif
|
|
|
+};
|
|
|
+
|
|
|
static int efx_netdev_event(struct notifier_block *this,
|
|
|
unsigned long event, void *ptr)
|
|
|
{
|
|
|
struct net_device *net_dev = ptr;
|
|
|
|
|
|
- if (net_dev->open == efx_net_open && event == NETDEV_CHANGENAME) {
|
|
|
+ if (net_dev->netdev_ops == &efx_netdev_ops && event == NETDEV_CHANGENAME) {
|
|
|
struct efx_nic *efx = netdev_priv(net_dev);
|
|
|
|
|
|
strcpy(efx->name, net_dev->name);
|
|
@@ -1459,18 +1475,7 @@ static int efx_register_netdev(struct efx_nic *efx)
|
|
|
|
|
|
net_dev->watchdog_timeo = 5 * HZ;
|
|
|
net_dev->irq = efx->pci_dev->irq;
|
|
|
- net_dev->open = efx_net_open;
|
|
|
- net_dev->stop = efx_net_stop;
|
|
|
- net_dev->get_stats = efx_net_stats;
|
|
|
- net_dev->tx_timeout = &efx_watchdog;
|
|
|
- net_dev->hard_start_xmit = efx_hard_start_xmit;
|
|
|
- net_dev->do_ioctl = efx_ioctl;
|
|
|
- net_dev->change_mtu = efx_change_mtu;
|
|
|
- net_dev->set_mac_address = efx_set_mac_address;
|
|
|
- net_dev->set_multicast_list = efx_set_multicast_list;
|
|
|
-#ifdef CONFIG_NET_POLL_CONTROLLER
|
|
|
- net_dev->poll_controller = efx_netpoll;
|
|
|
-#endif
|
|
|
+ net_dev->netdev_ops = &efx_netdev_ops;
|
|
|
SET_NETDEV_DEV(net_dev, &efx->pci_dev->dev);
|
|
|
SET_ETHTOOL_OPS(net_dev, &efx_ethtool_ops);
|
|
|
|