r8169: convert to net_device_ops
Based upon a patch by Stephen Hemminger. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f80d032b5f
commit
8b4ab28dae
|
@ -474,6 +474,7 @@ struct rtl8169_private {
|
||||||
void (*hw_start)(struct net_device *);
|
void (*hw_start)(struct net_device *);
|
||||||
unsigned int (*phy_reset_pending)(void __iomem *);
|
unsigned int (*phy_reset_pending)(void __iomem *);
|
||||||
unsigned int (*link_ok)(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;
|
int pcie_cap;
|
||||||
struct delayed_work task;
|
struct delayed_work task;
|
||||||
unsigned features;
|
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 rtl8169_private *tp = netdev_priv(dev);
|
||||||
struct mii_ioctl_data *data = if_mii(ifr);
|
struct mii_ioctl_data *data = if_mii(ifr);
|
||||||
|
|
||||||
if (!netif_running(dev))
|
return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV;
|
||||||
return -ENODEV;
|
}
|
||||||
|
|
||||||
|
static int rtl_xmii_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
|
||||||
|
{
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case SIOCGMIIPHY:
|
case SIOCGMIIPHY:
|
||||||
data->phy_id = 32; /* Internal PHY */
|
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;
|
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 {
|
static const struct rtl_cfg_info {
|
||||||
void (*hw_start)(struct net_device *);
|
void (*hw_start)(struct net_device *);
|
||||||
unsigned int region;
|
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
|
static int __devinit
|
||||||
rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
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);
|
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||||
|
dev->netdev_ops = &rtl8169_netdev_ops;
|
||||||
tp = netdev_priv(dev);
|
tp = netdev_priv(dev);
|
||||||
tp->dev = dev;
|
tp->dev = dev;
|
||||||
tp->pci_dev = pdev;
|
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_enable = rtl8169_tbi_reset_enable;
|
||||||
tp->phy_reset_pending = rtl8169_tbi_reset_pending;
|
tp->phy_reset_pending = rtl8169_tbi_reset_pending;
|
||||||
tp->link_ok = rtl8169_tbi_link_ok;
|
tp->link_ok = rtl8169_tbi_link_ok;
|
||||||
|
tp->do_ioctl = rtl_tbi_ioctl;
|
||||||
|
|
||||||
tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */
|
tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */
|
||||||
} else {
|
} 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_enable = rtl8169_xmii_reset_enable;
|
||||||
tp->phy_reset_pending = rtl8169_xmii_reset_pending;
|
tp->phy_reset_pending = rtl8169_xmii_reset_pending;
|
||||||
tp->link_ok = rtl8169_xmii_link_ok;
|
tp->link_ok = rtl8169_xmii_link_ok;
|
||||||
|
tp->do_ioctl = rtl_xmii_ioctl;
|
||||||
dev->do_ioctl = rtl8169_ioctl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_init(&tp->lock);
|
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);
|
dev->dev_addr[i] = RTL_R8(MAC0 + i);
|
||||||
memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
|
memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
|
||||||
|
|
||||||
dev->open = rtl8169_open;
|
|
||||||
dev->hard_start_xmit = rtl8169_start_xmit;
|
dev->hard_start_xmit = rtl8169_start_xmit;
|
||||||
dev->get_stats = rtl8169_get_stats;
|
|
||||||
SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops);
|
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->watchdog_timeo = RTL8169_TX_TIMEOUT;
|
||||||
dev->irq = pdev->irq;
|
dev->irq = pdev->irq;
|
||||||
dev->base_addr = (unsigned long) ioaddr;
|
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);
|
netif_napi_add(dev, &tp->napi, rtl8169_poll, R8169_NAPI_WEIGHT);
|
||||||
|
|
||||||
#ifdef CONFIG_R8169_VLAN
|
#ifdef CONFIG_R8169_VLAN
|
||||||
dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
|
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
|
#endif
|
||||||
|
|
||||||
tp->intr_mask = 0xffff;
|
tp->intr_mask = 0xffff;
|
||||||
|
|
Loading…
Reference in New Issue