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: Stephen Hemminger <shemminger@vyatta.com> Reviewed-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
dde0975855
Коммит
687c75dcf3
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
__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)
|
||||||
__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)
|
||||||
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)
|
||||||
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,
|
||||||
|
|
||||||
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 {
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче