diff options
| author | Francois Romieu <romieu@fr.zoreil.com> | 2008-11-19 22:05:25 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-11-19 22:42:45 -0800 | 
| commit | 8b4ab28dae8afa14f22d210c591046def2f4d742 (patch) | |
| tree | 337ad3544c1d9a35e9e0353ca95a8245e3b768b7 /drivers/net/r8169.c | |
| parent | f80d032b5fe95e3ce89f79210859b7ec799e1ccc (diff) | |
r8169: convert to net_device_ops
Based upon a patch by Stephen Hemminger.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/r8169.c')
| -rw-r--r-- | drivers/net/r8169.c | 48 | 
1 files changed, 32 insertions, 16 deletions
| diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index cb5042ef6dc7..bac58ca628dd 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c @@ -474,6 +474,7 @@ struct rtl8169_private {  	void (*hw_start)(struct net_device *);  	unsigned int (*phy_reset_pending)(void __iomem *);  	unsigned int (*link_ok)(void __iomem *); +	int (*do_ioctl)(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd);  	int pcie_cap;  	struct delayed_work task;  	unsigned features; @@ -1829,9 +1830,11 @@ static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)  	struct rtl8169_private *tp = netdev_priv(dev);  	struct mii_ioctl_data *data = if_mii(ifr); -	if (!netif_running(dev)) -		return -ENODEV; +	return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV; +} +static int rtl_xmii_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd) +{  	switch (cmd) {  	case SIOCGMIIPHY:  		data->phy_id = 32; /* Internal PHY */ @@ -1850,6 +1853,11 @@ static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)  	return -EOPNOTSUPP;  } +static int rtl_tbi_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd) +{ +	return -EOPNOTSUPP; +} +  static const struct rtl_cfg_info {  	void (*hw_start)(struct net_device *);  	unsigned int region; @@ -1915,6 +1923,25 @@ static void rtl_disable_msi(struct pci_dev *pdev, struct rtl8169_private *tp)  	}  } +static const struct net_device_ops rtl8169_netdev_ops = { +	.ndo_open		= rtl8169_open, +	.ndo_stop		= rtl8169_close, +	.ndo_get_stats		= rtl8169_get_stats, +	.ndo_tx_timeout		= rtl8169_tx_timeout, +	.ndo_validate_addr	= eth_validate_addr, +	.ndo_change_mtu		= rtl8169_change_mtu, +	.ndo_set_mac_address	= rtl_set_mac_address, +	.ndo_do_ioctl		= rtl8169_ioctl, +	.ndo_set_multicast_list	= rtl_set_rx_mode, +#ifdef CONFIG_R8169_VLAN +	.ndo_vlan_rx_register	= rtl8169_vlan_rx_register, +#endif +#ifdef CONFIG_NET_POLL_CONTROLLER +	.ndo_poll_controller	= rtl8169_netpoll, +#endif + +}; +  static int __devinit  rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  { @@ -1941,6 +1968,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  	}  	SET_NETDEV_DEV(dev, &pdev->dev); +	dev->netdev_ops = &rtl8169_netdev_ops;  	tp = netdev_priv(dev);  	tp->dev = dev;  	tp->pci_dev = pdev; @@ -2076,6 +2104,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  		tp->phy_reset_enable = rtl8169_tbi_reset_enable;  		tp->phy_reset_pending = rtl8169_tbi_reset_pending;  		tp->link_ok = rtl8169_tbi_link_ok; +		tp->do_ioctl = rtl_tbi_ioctl;  		tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */  	} else { @@ -2084,8 +2113,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  		tp->phy_reset_enable = rtl8169_xmii_reset_enable;  		tp->phy_reset_pending = rtl8169_xmii_reset_pending;  		tp->link_ok = rtl8169_xmii_link_ok; - -		dev->do_ioctl = rtl8169_ioctl; +		tp->do_ioctl = rtl_xmii_ioctl;  	}  	spin_lock_init(&tp->lock); @@ -2097,28 +2125,16 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  		dev->dev_addr[i] = RTL_R8(MAC0 + i);  	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); -	dev->open = rtl8169_open;  	dev->hard_start_xmit = rtl8169_start_xmit; -	dev->get_stats = rtl8169_get_stats;  	SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops); -	dev->stop = rtl8169_close; -	dev->tx_timeout = rtl8169_tx_timeout; -	dev->set_multicast_list = rtl_set_rx_mode;  	dev->watchdog_timeo = RTL8169_TX_TIMEOUT;  	dev->irq = pdev->irq;  	dev->base_addr = (unsigned long) ioaddr; -	dev->change_mtu = rtl8169_change_mtu; -	dev->set_mac_address = rtl_set_mac_address;  	netif_napi_add(dev, &tp->napi, rtl8169_poll, R8169_NAPI_WEIGHT);  #ifdef CONFIG_R8169_VLAN  	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; -	dev->vlan_rx_register = rtl8169_vlan_rx_register; -#endif - -#ifdef CONFIG_NET_POLL_CONTROLLER -	dev->poll_controller = rtl8169_netpoll;  #endif  	tp->intr_mask = 0xffff; | 
