static void vmxnet3_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo) { struct vmxnet3_adapter *adapter = netdev_priv(netdev); strlcpy(drvinfo->driver, vmxnet3_driver_name, sizeof(drvinfo->driver)); strlcpy(drvinfo->version, VMXNET3_DRIVER_VERSION_REPORT, sizeof(drvinfo->version)); strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), ETHTOOL_BUSINFO_LEN); drvinfo->n_stats = vmxnet3_get_sset_count(netdev, ETH_SS_STATS); drvinfo->testinfo_len = 0; drvinfo->eedump_len = 0; drvinfo->regdump_len = vmxnet3_get_regs_len(netdev); }
static void vmxnet3_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p) { struct vmxnet3_adapter *adapter = netdev_priv(netdev); u32 *buf = p; int i = 0, j = 0; memset(p, 0, vmxnet3_get_regs_len(netdev)); regs->version = 1; /* Update vmxnet3_get_regs_len if we want to dump more registers */ /* make each ring use multiple of 16 bytes */ for (i = 0; i < adapter->num_tx_queues; i++) { buf[j++] = adapter->tx_queue[i].tx_ring.next2fill; buf[j++] = adapter->tx_queue[i].tx_ring.next2comp; buf[j++] = adapter->tx_queue[i].tx_ring.gen; buf[j++] = 0; buf[j++] = adapter->tx_queue[i].comp_ring.next2proc; buf[j++] = adapter->tx_queue[i].comp_ring.gen; buf[j++] = adapter->tx_queue[i].stopped; buf[j++] = 0; } for (i = 0; i < adapter->num_rx_queues; i++) { buf[j++] = adapter->rx_queue[i].rx_ring[0].next2fill; buf[j++] = adapter->rx_queue[i].rx_ring[0].next2comp; buf[j++] = adapter->rx_queue[i].rx_ring[0].gen; buf[j++] = 0; buf[j++] = adapter->rx_queue[i].rx_ring[1].next2fill; buf[j++] = adapter->rx_queue[i].rx_ring[1].next2comp; buf[j++] = adapter->rx_queue[i].rx_ring[1].gen; buf[j++] = 0; buf[j++] = adapter->rx_queue[i].comp_ring.next2proc; buf[j++] = adapter->rx_queue[i].comp_ring.gen; buf[j++] = 0; buf[j++] = 0; } }
static void vmxnet3_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p) { struct vmxnet3_adapter *adapter = netdev_priv(netdev); u32 *buf = p; memset(p, 0, vmxnet3_get_regs_len(netdev)); regs->version = 1; /* Update vmxnet3_get_regs_len if we want to dump more registers */ /* make each ring use multiple of 16 bytes */ buf[0] = adapter->tx_queue.tx_ring.next2fill; buf[1] = adapter->tx_queue.tx_ring.next2comp; buf[2] = adapter->tx_queue.tx_ring.gen; buf[3] = 0; buf[4] = adapter->tx_queue.comp_ring.next2proc; buf[5] = adapter->tx_queue.comp_ring.gen; buf[6] = adapter->tx_queue.stopped; buf[7] = 0; buf[8] = adapter->rx_queue.rx_ring[0].next2fill; buf[9] = adapter->rx_queue.rx_ring[0].next2comp; buf[10] = adapter->rx_queue.rx_ring[0].gen; buf[11] = 0; buf[12] = adapter->rx_queue.rx_ring[1].next2fill; buf[13] = adapter->rx_queue.rx_ring[1].next2comp; buf[14] = adapter->rx_queue.rx_ring[1].gen; buf[15] = 0; buf[16] = adapter->rx_queue.comp_ring.next2proc; buf[17] = adapter->rx_queue.comp_ring.gen; buf[18] = 0; buf[19] = 0; }