提交 687c75dc 编写于 作者: S Stephen Hemminger 提交者: David S. Miller

infiniband: convert c2 to net_device_ops

Convert this driver to new net_device_ops infrastructure.
Also use default net_device get-stats infrastructure
Signed-off-by: NStephen Hemminger <shemminger@vyatta.com>
Reviewed-by: NSteve Wise <swise@opengridcomputing.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 dde09758
...@@ -76,7 +76,6 @@ static irqreturn_t c2_interrupt(int irq, void *dev_id); ...@@ -76,7 +76,6 @@ static irqreturn_t c2_interrupt(int irq, void *dev_id);
static void c2_tx_timeout(struct net_device *netdev); static void c2_tx_timeout(struct net_device *netdev);
static int c2_change_mtu(struct net_device *netdev, int new_mtu); static int c2_change_mtu(struct net_device *netdev, int new_mtu);
static void c2_reset(struct c2_port *c2_port); static void c2_reset(struct c2_port *c2_port);
static struct net_device_stats *c2_get_stats(struct net_device *netdev);
static struct pci_device_id c2_pci_table[] = { static struct pci_device_id c2_pci_table[] = {
{ PCI_DEVICE(0x18b8, 0xb001) }, { PCI_DEVICE(0x18b8, 0xb001) },
...@@ -349,7 +348,7 @@ static void c2_tx_clean(struct c2_port *c2_port) ...@@ -349,7 +348,7 @@ static void c2_tx_clean(struct c2_port *c2_port)
elem->hw_desc + C2_TXP_ADDR); elem->hw_desc + C2_TXP_ADDR);
__raw_writew((__force u16) cpu_to_be16(TXP_HTXD_DONE), __raw_writew((__force u16) cpu_to_be16(TXP_HTXD_DONE),
elem->hw_desc + C2_TXP_FLAGS); elem->hw_desc + C2_TXP_FLAGS);
c2_port->netstats.tx_dropped++; c2_port->netdev->stats.tx_dropped++;
break; break;
} else { } else {
__raw_writew(0, __raw_writew(0,
...@@ -457,7 +456,7 @@ static void c2_rx_error(struct c2_port *c2_port, struct c2_element *elem) ...@@ -457,7 +456,7 @@ static void c2_rx_error(struct c2_port *c2_port, struct c2_element *elem)
elem->hw_desc + C2_RXP_FLAGS); elem->hw_desc + C2_RXP_FLAGS);
pr_debug("packet dropped\n"); pr_debug("packet dropped\n");
c2_port->netstats.rx_dropped++; c2_port->netdev->stats.rx_dropped++;
} }
static void c2_rx_interrupt(struct net_device *netdev) static void c2_rx_interrupt(struct net_device *netdev)
...@@ -532,8 +531,8 @@ static void c2_rx_interrupt(struct net_device *netdev) ...@@ -532,8 +531,8 @@ static void c2_rx_interrupt(struct net_device *netdev)
netif_rx(skb); netif_rx(skb);
netdev->last_rx = jiffies; netdev->last_rx = jiffies;
c2_port->netstats.rx_packets++; netdev->stats.rx_packets++;
c2_port->netstats.rx_bytes += buflen; netdev->stats.rx_bytes += buflen;
} }
/* Save where we left off */ /* Save where we left off */
...@@ -797,8 +796,8 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -797,8 +796,8 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
__raw_writew((__force u16) cpu_to_be16(TXP_HTXD_READY), __raw_writew((__force u16) cpu_to_be16(TXP_HTXD_READY),
elem->hw_desc + C2_TXP_FLAGS); elem->hw_desc + C2_TXP_FLAGS);
c2_port->netstats.tx_packets++; netdev->stats.tx_packets++;
c2_port->netstats.tx_bytes += maplen; netdev->stats.tx_bytes += maplen;
/* Loop thru additional data fragments and queue them */ /* Loop thru additional data fragments and queue them */
if (skb_shinfo(skb)->nr_frags) { if (skb_shinfo(skb)->nr_frags) {
...@@ -823,8 +822,8 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -823,8 +822,8 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
__raw_writew((__force u16) cpu_to_be16(TXP_HTXD_READY), __raw_writew((__force u16) cpu_to_be16(TXP_HTXD_READY),
elem->hw_desc + C2_TXP_FLAGS); elem->hw_desc + C2_TXP_FLAGS);
c2_port->netstats.tx_packets++; netdev->stats.tx_packets++;
c2_port->netstats.tx_bytes += maplen; netdev->stats.tx_bytes += maplen;
} }
} }
...@@ -845,13 +844,6 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -845,13 +844,6 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
return NETDEV_TX_OK; return NETDEV_TX_OK;
} }
static struct net_device_stats *c2_get_stats(struct net_device *netdev)
{
struct c2_port *c2_port = netdev_priv(netdev);
return &c2_port->netstats;
}
static void c2_tx_timeout(struct net_device *netdev) static void c2_tx_timeout(struct net_device *netdev)
{ {
struct c2_port *c2_port = netdev_priv(netdev); struct c2_port *c2_port = netdev_priv(netdev);
...@@ -880,6 +872,16 @@ static int c2_change_mtu(struct net_device *netdev, int new_mtu) ...@@ -880,6 +872,16 @@ static int c2_change_mtu(struct net_device *netdev, int new_mtu)
return ret; return ret;
} }
static const struct net_device_ops c2_netdev = {
.ndo_open = c2_up,
.ndo_stop = c2_down,
.ndo_start_xmit = c2_xmit_frame,
.ndo_tx_timeout = c2_tx_timeout,
.ndo_change_mtu = c2_change_mtu,
.ndo_set_mac_address = eth_mac_addr,
.ndo_validate_addr = eth_validate_addr,
};
/* Initialize network device */ /* Initialize network device */
static struct net_device *c2_devinit(struct c2_dev *c2dev, static struct net_device *c2_devinit(struct c2_dev *c2dev,
void __iomem * mmio_addr) void __iomem * mmio_addr)
...@@ -894,12 +896,7 @@ static struct net_device *c2_devinit(struct c2_dev *c2dev, ...@@ -894,12 +896,7 @@ static struct net_device *c2_devinit(struct c2_dev *c2dev,
SET_NETDEV_DEV(netdev, &c2dev->pcidev->dev); SET_NETDEV_DEV(netdev, &c2dev->pcidev->dev);
netdev->open = c2_up; netdev->netdev_ops = &c2_netdev;
netdev->stop = c2_down;
netdev->hard_start_xmit = c2_xmit_frame;
netdev->get_stats = c2_get_stats;
netdev->tx_timeout = c2_tx_timeout;
netdev->change_mtu = c2_change_mtu;
netdev->watchdog_timeo = C2_TX_TIMEOUT; netdev->watchdog_timeo = C2_TX_TIMEOUT;
netdev->irq = c2dev->pcidev->irq; netdev->irq = c2dev->pcidev->irq;
......
...@@ -369,8 +369,6 @@ struct c2_port { ...@@ -369,8 +369,6 @@ struct c2_port {
unsigned long mem_size; unsigned long mem_size;
u32 rx_buf_size; u32 rx_buf_size;
struct net_device_stats netstats;
}; };
/* /*
......
...@@ -708,26 +708,27 @@ static int c2_pseudo_xmit_frame(struct sk_buff *skb, struct net_device *netdev) ...@@ -708,26 +708,27 @@ static int c2_pseudo_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
static int c2_pseudo_change_mtu(struct net_device *netdev, int new_mtu) static int c2_pseudo_change_mtu(struct net_device *netdev, int new_mtu)
{ {
int ret = 0;
if (new_mtu < ETH_ZLEN || new_mtu > ETH_JUMBO_MTU) if (new_mtu < ETH_ZLEN || new_mtu > ETH_JUMBO_MTU)
return -EINVAL; return -EINVAL;
netdev->mtu = new_mtu; netdev->mtu = new_mtu;
/* TODO: Tell rnic about new rmda interface mtu */ /* TODO: Tell rnic about new rmda interface mtu */
return ret; return 0;
} }
static const struct net_device_ops c2_pseudo_netdev_ops = {
.ndo_open = c2_pseudo_up,
.ndo_stop = c2_pseudo_down,
.ndo_start_xmit = c2_pseudo_xmit_frame,
.ndo_change_mtu = c2_pseudo_change_mtu,
.ndo_validate_addr = eth_validate_addr,
};
static void setup(struct net_device *netdev) static void setup(struct net_device *netdev)
{ {
netdev->open = c2_pseudo_up; netdev->netdev_ops = &c2_pseudo_netdev_ops;
netdev->stop = c2_pseudo_down;
netdev->hard_start_xmit = c2_pseudo_xmit_frame;
netdev->get_stats = NULL;
netdev->tx_timeout = NULL;
netdev->set_mac_address = NULL;
netdev->change_mtu = c2_pseudo_change_mtu;
netdev->watchdog_timeo = 0; netdev->watchdog_timeo = 0;
netdev->type = ARPHRD_ETHER; netdev->type = ARPHRD_ETHER;
netdev->mtu = 1500; netdev->mtu = 1500;
...@@ -735,7 +736,6 @@ static void setup(struct net_device *netdev) ...@@ -735,7 +736,6 @@ static void setup(struct net_device *netdev)
netdev->addr_len = ETH_ALEN; netdev->addr_len = ETH_ALEN;
netdev->tx_queue_len = 0; netdev->tx_queue_len = 0;
netdev->flags |= IFF_NOARP; netdev->flags |= IFF_NOARP;
return;
} }
static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev) static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册