Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 687c75dc authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

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: default avatarStephen Hemminger <shemminger@vyatta.com>
Reviewed-by: default avatarSteve Wise <swise@opengridcomputing.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent dde09758
Loading
Loading
Loading
Loading
+19 −22
Original line number Diff line number Diff line
@@ -76,7 +76,6 @@ static irqreturn_t c2_interrupt(int irq, void *dev_id);
static void c2_tx_timeout(struct net_device *netdev);
static int c2_change_mtu(struct net_device *netdev, int new_mtu);
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[] = {
	{ PCI_DEVICE(0x18b8, 0xb001) },
@@ -349,7 +348,7 @@ static void c2_tx_clean(struct c2_port *c2_port)
					     elem->hw_desc + C2_TXP_ADDR);
				__raw_writew((__force u16) cpu_to_be16(TXP_HTXD_DONE),
					     elem->hw_desc + C2_TXP_FLAGS);
				c2_port->netstats.tx_dropped++;
				c2_port->netdev->stats.tx_dropped++;
				break;
			} else {
				__raw_writew(0,
@@ -457,7 +456,7 @@ static void c2_rx_error(struct c2_port *c2_port, struct c2_element *elem)
		     elem->hw_desc + C2_RXP_FLAGS);

	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)
@@ -532,8 +531,8 @@ static void c2_rx_interrupt(struct net_device *netdev)
		netif_rx(skb);

		netdev->last_rx = jiffies;
		c2_port->netstats.rx_packets++;
		c2_port->netstats.rx_bytes += buflen;
		netdev->stats.rx_packets++;
		netdev->stats.rx_bytes += buflen;
	}

	/* Save where we left off */
@@ -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),
		     elem->hw_desc + C2_TXP_FLAGS);

	c2_port->netstats.tx_packets++;
	c2_port->netstats.tx_bytes += maplen;
	netdev->stats.tx_packets++;
	netdev->stats.tx_bytes += maplen;

	/* Loop thru additional data fragments and queue them */
	if (skb_shinfo(skb)->nr_frags) {
@@ -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),
				     elem->hw_desc + C2_TXP_FLAGS);

			c2_port->netstats.tx_packets++;
			c2_port->netstats.tx_bytes += maplen;
			netdev->stats.tx_packets++;
			netdev->stats.tx_bytes += maplen;
		}
	}

@@ -845,13 +844,6 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
	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)
{
	struct c2_port *c2_port = netdev_priv(netdev);
@@ -880,6 +872,16 @@ static int c2_change_mtu(struct net_device *netdev, int new_mtu)
	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 */
static struct net_device *c2_devinit(struct c2_dev *c2dev,
				     void __iomem * mmio_addr)
@@ -894,12 +896,7 @@ static struct net_device *c2_devinit(struct c2_dev *c2dev,

	SET_NETDEV_DEV(netdev, &c2dev->pcidev->dev);

	netdev->open = c2_up;
	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->netdev_ops = &c2_netdev;
	netdev->watchdog_timeo = C2_TX_TIMEOUT;
	netdev->irq = c2dev->pcidev->irq;

+0 −2
Original line number Diff line number Diff line
@@ -369,8 +369,6 @@ struct c2_port {
	unsigned long mem_size;

	u32 rx_buf_size;

	struct net_device_stats netstats;
};

/*
+11 −11
Original line number Diff line number Diff line
@@ -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)
{
	int ret = 0;

	if (new_mtu < ETH_ZLEN || new_mtu > ETH_JUMBO_MTU)
		return -EINVAL;

	netdev->mtu = new_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)
{
	netdev->open = c2_pseudo_up;
	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->netdev_ops = &c2_pseudo_netdev_ops;

	netdev->watchdog_timeo = 0;
	netdev->type = ARPHRD_ETHER;
	netdev->mtu = 1500;
@@ -735,7 +736,6 @@ static void setup(struct net_device *netdev)
	netdev->addr_len = ETH_ALEN;
	netdev->tx_queue_len = 0;
	netdev->flags |= IFF_NOARP;
	return;
}

static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)