vxge-ethtool.c revision e8ac175615b9458a00193c55617b5b8865e67817
1d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/******************************************************************************
2d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * This software may be used and distributed according to the terms of
3d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * the GNU General Public License (GPL), incorporated herein by reference.
4d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Drivers based on or derived from this code fall under the GPL and must
5d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * retain the authorship, copyright and license notice.  This file is not
6d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * a complete program and may only be used when the entire operating
7d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * system is licensed under the GPL.
8d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * See the file COPYING in this distribution for more information.
9d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa *
10926bd900b192986ccb742177b1492e8523579a35Jon Mason * vxge-ethtool.c: Driver for Exar Corp's X3100 Series 10GbE PCIe I/O
11d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa *                 Virtualized Server Adapter.
12926bd900b192986ccb742177b1492e8523579a35Jon Mason * Copyright(c) 2002-2010 Exar Corp.
13d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa ******************************************************************************/
14d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa#include<linux/ethtool.h>
155a0e3ad6af8660be21ca98a971cd00f331318c05Tejun Heo#include <linux/slab.h>
16d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa#include <linux/pci.h>
17d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa#include <linux/etherdevice.h>
18d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
19d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa#include "vxge-ethtool.h"
20d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
21d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/**
22d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_sset - Sets different link parameters.
23d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev: device pointer.
24d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @info: pointer to the structure with parameters given by ethtool to set
25d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * link information.
26d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa *
27d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * The function sets different link parameters provided by the user onto
28d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * the NIC.
29d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Return value:
30d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * 0 on success.
31d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */
32d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
33d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_sset(struct net_device *dev, struct ethtool_cmd *info)
34d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
35d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	/* We currently only support 10Gb/FULL */
36d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if ((info->autoneg == AUTONEG_ENABLE) ||
37d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	    (info->speed != SPEED_10000) || (info->duplex != DUPLEX_FULL))
38d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		return -EINVAL;
39d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
40d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	return 0;
41d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
42d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
43d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/**
44d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_gset - Return link specific information.
45d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev: device pointer.
46d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @info: pointer to the structure with parameters given by ethtool
47d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * to return link information.
48d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa *
49d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Returns link specific information like speed, duplex etc.. to ethtool.
50d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Return value :
51d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * return 0 on success.
52d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */
53d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_gset(struct net_device *dev, struct ethtool_cmd *info)
54d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
55d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	info->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_FIBRE);
56d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	info->advertising = (ADVERTISED_10000baseT_Full | ADVERTISED_FIBRE);
57d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	info->port = PORT_FIBRE;
58d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
59d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	info->transceiver = XCVR_EXTERNAL;
60d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
61d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (netif_carrier_ok(dev)) {
62d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		info->speed = SPEED_10000;
63d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		info->duplex = DUPLEX_FULL;
64d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	} else {
65d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		info->speed = -1;
66d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		info->duplex = -1;
67d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
68d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
69d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	info->autoneg = AUTONEG_DISABLE;
70d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	return 0;
71d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
72d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
73d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/**
74d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_gdrvinfo - Returns driver specific information.
75d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev: device pointer.
76d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @info: pointer to the structure with parameters given by ethtool to
77d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * return driver information.
78d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa *
79d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Returns driver specefic information like name, version etc.. to ethtool.
80d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */
81d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_ethtool_gdrvinfo(struct net_device *dev,
82d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			struct ethtool_drvinfo *info)
83d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
84d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev;
85d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	vdev = (struct vxgedev *)netdev_priv(dev);
86d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	strlcpy(info->driver, VXGE_DRIVER_NAME, sizeof(VXGE_DRIVER_NAME));
87d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	strlcpy(info->version, DRV_VERSION, sizeof(DRV_VERSION));
88d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	strlcpy(info->fw_version, vdev->fw_version, VXGE_HW_FW_STRLEN);
89d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	strlcpy(info->bus_info, pci_name(vdev->pdev), sizeof(info->bus_info));
90d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	info->regdump_len = sizeof(struct vxge_hw_vpath_reg)
91d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				* vdev->no_of_vpath;
92d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
93d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	info->n_stats = STAT_LEN;
94d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
95d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
96d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/**
97d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_gregs - dumps the entire space of Titan into the buffer.
98d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev: device pointer.
99d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @regs: pointer to the structure with parameters given by ethtool for
100d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * dumping the registers.
101d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @reg_space: The input argumnet into which all the registers are dumped.
102d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa *
103d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Dumps the vpath register space of Titan NIC into the user given
104d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * buffer area.
105d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */
106d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_ethtool_gregs(struct net_device *dev,
107d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			struct ethtool_regs *regs, void *space)
108d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
109d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	int index, offset;
110d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	enum vxge_hw_status status;
111d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	u64 reg;
1124c5f3b210f53e315e460d539655a8d14595c5d1aSreenivasa Honnur	u64 *reg_space = (u64 *) space;
113d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
114d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct __vxge_hw_device  *hldev = (struct __vxge_hw_device *)
115d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					pci_get_drvdata(vdev->pdev);
116d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
117d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	regs->len = sizeof(struct vxge_hw_vpath_reg) * vdev->no_of_vpath;
118d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	regs->version = vdev->pdev->subsystem_device;
119d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	for (index = 0; index < vdev->no_of_vpath; index++) {
120d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		for (offset = 0; offset < sizeof(struct vxge_hw_vpath_reg);
121d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				offset += 8) {
122d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			status = vxge_hw_mgmt_reg_read(hldev,
123d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					vxge_hw_mgmt_reg_type_vpath,
124d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					vdev->vpaths[index].device_id,
125d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					offset, &reg);
126d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			if (status != VXGE_HW_OK) {
127d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				vxge_debug_init(VXGE_ERR,
128d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					"%s:%d Getting reg dump Failed",
129d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa						__func__, __LINE__);
130d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				return;
131d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			}
1324c5f3b210f53e315e460d539655a8d14595c5d1aSreenivasa Honnur			*reg_space++ = reg;
133d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
134d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
135d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
136d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
137d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/**
138d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_idnic - To physically identify the nic on the system.
139d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev : device pointer.
140d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @id : pointer to the structure with identification parameters given by
141d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * ethtool.
142d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa *
143d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Used to physically identify the NIC on the system.
144d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * The Link LED will blink for a time specified by the user.
145d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Return value:
146d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * 0 on success
147d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */
148d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_idnic(struct net_device *dev, u32 data)
149d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
150d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
151d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct __vxge_hw_device  *hldev = (struct __vxge_hw_device  *)
152d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			pci_get_drvdata(vdev->pdev);
153d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
154d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	vxge_hw_device_flick_link_led(hldev, VXGE_FLICKER_ON);
155d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	msleep_interruptible(data ? (data * HZ) : VXGE_MAX_FLICKER_TIME);
156d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	vxge_hw_device_flick_link_led(hldev, VXGE_FLICKER_OFF);
157d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
158d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	return 0;
159d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
160d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
161d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/**
162d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_getpause_data - Pause frame frame generation and reception.
163d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev : device pointer.
164d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @ep : pointer to the structure with pause parameters given by ethtool.
165d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Description:
166d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Returns the Pause frame generation and reception capability of the NIC.
167d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Return value:
168d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa *  void
169d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */
170d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_ethtool_getpause_data(struct net_device *dev,
171d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					struct ethtool_pauseparam *ep)
172d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
173d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
174d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct __vxge_hw_device  *hldev = (struct __vxge_hw_device  *)
175d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			pci_get_drvdata(vdev->pdev);
176d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
177d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	vxge_hw_device_getpause_data(hldev, 0, &ep->tx_pause, &ep->rx_pause);
178d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
179d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
180d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/**
181d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_setpause_data -  set/reset pause frame generation.
182d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev : device pointer.
183d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @ep : pointer to the structure with pause parameters given by ethtool.
184d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Description:
185d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * It can be used to set or reset Pause frame generation or reception
186d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * support of the NIC.
187d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Return value:
188d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * int, returns 0 on Success
189d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */
190d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_setpause_data(struct net_device *dev,
191d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					struct ethtool_pauseparam *ep)
192d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
193d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
194d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct __vxge_hw_device  *hldev = (struct __vxge_hw_device  *)
195d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			pci_get_drvdata(vdev->pdev);
196d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
197d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	vxge_hw_device_setpause_data(hldev, 0, ep->tx_pause, ep->rx_pause);
198d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
199d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	vdev->config.tx_pause_enable = ep->tx_pause;
200d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	vdev->config.rx_pause_enable = ep->rx_pause;
201d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
202d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	return 0;
203d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
204d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
205d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_get_ethtool_stats(struct net_device *dev,
206d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				   struct ethtool_stats *estats, u64 *tmp_stats)
207d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
208d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	int j, k;
209d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	enum vxge_hw_status status;
210d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	enum vxge_hw_status swstatus;
211d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxge_vpath *vpath = NULL;
212d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
213d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
214d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct __vxge_hw_device  *hldev = vdev->devh;
215d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxge_hw_xmac_stats *xmac_stats;
216d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxge_hw_device_stats_sw_info *sw_stats;
217d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxge_hw_device_stats_hw_info *hw_stats;
218d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
219d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	u64 *ptr = tmp_stats;
220d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
221d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	memset(tmp_stats, 0,
222d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_ethtool_get_sset_count(dev, ETH_SS_STATS) * sizeof(u64));
223d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
224d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	xmac_stats = kzalloc(sizeof(struct vxge_hw_xmac_stats), GFP_KERNEL);
225d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (xmac_stats == NULL) {
226d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_debug_init(VXGE_ERR,
227d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			"%s : %d Memory Allocation failed for xmac_stats",
228d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				 __func__, __LINE__);
229d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		return;
230d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
231d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
232d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	sw_stats = kzalloc(sizeof(struct vxge_hw_device_stats_sw_info),
233d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				GFP_KERNEL);
234d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (sw_stats == NULL) {
235d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		kfree(xmac_stats);
236d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_debug_init(VXGE_ERR,
237d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			"%s : %d Memory Allocation failed for sw_stats",
238d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			__func__, __LINE__);
239d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		return;
240d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
241d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
242d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	hw_stats = kzalloc(sizeof(struct vxge_hw_device_stats_hw_info),
243d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				GFP_KERNEL);
244d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (hw_stats == NULL) {
245d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		kfree(xmac_stats);
246d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		kfree(sw_stats);
247d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_debug_init(VXGE_ERR,
248d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			"%s : %d Memory Allocation failed for hw_stats",
249d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			__func__, __LINE__);
250d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		return;
251d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
252d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
253d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = 0;
254d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	status = vxge_hw_device_xmac_stats_get(hldev, xmac_stats);
255d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (status != VXGE_HW_OK) {
256d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		if (status != VXGE_HW_ERR_PRIVILAGED_OPEARATION) {
257d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_debug_init(VXGE_ERR,
258d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				"%s : %d Failure in getting xmac stats",
259d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				__func__, __LINE__);
260d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
261d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
262d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	swstatus = vxge_hw_driver_stats_get(hldev, sw_stats);
263d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (swstatus != VXGE_HW_OK) {
264d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_debug_init(VXGE_ERR,
265d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			"%s : %d Failure in getting sw stats",
266d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			__func__, __LINE__);
267d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
268d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
269d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	status = vxge_hw_device_stats_get(hldev, hw_stats);
270d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (status != VXGE_HW_OK) {
271d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_debug_init(VXGE_ERR,
272d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			"%s : %d hw_stats_get error", __func__, __LINE__);
273d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
274d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
275d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	for (k = 0; k < vdev->no_of_vpath; k++) {
276d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		struct vxge_hw_vpath_stats_hw_info *vpath_info;
277d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
278d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vpath = &vdev->vpaths[k];
279d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		j = vpath->device_id;
280d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vpath_info = hw_stats->vpath_info[j];
281d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		if (!vpath_info) {
282d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			memset(ptr, 0, (VXGE_HW_VPATH_TX_STATS_LEN +
283d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				VXGE_HW_VPATH_RX_STATS_LEN) * sizeof(u64));
284d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			ptr += (VXGE_HW_VPATH_TX_STATS_LEN +
285d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				VXGE_HW_VPATH_RX_STATS_LEN);
286d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			continue;
287d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
288d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
289d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_ttl_eth_frms;
290d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_ttl_eth_octets;
291d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_data_octets;
292d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_mcast_frms;
293d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_bcast_frms;
294d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_ucast_frms;
295d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_tagged_frms;
296d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_vld_ip;
297d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_vld_ip_octets;
298d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_icmp;
299d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_tcp;
300d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_rst_tcp;
301d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_udp;
302d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_unknown_protocol;
303d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_lost_ip;
304d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_parse_error;
305d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_tcp_offload;
306d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_retx_tcp_offload;
307d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_stats.tx_lost_ip_offload;
308d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_eth_frms;
309d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_vld_frms;
310d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_offload_frms;
311d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_eth_octets;
312d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_data_octets;
313d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_offload_octets;
314d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_vld_mcast_frms;
315d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_vld_bcast_frms;
316d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_accepted_ucast_frms;
317d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_accepted_nucast_frms;
318d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_tagged_frms;
319d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_long_frms;
320d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_usized_frms;
321d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_osized_frms;
322d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_frag_frms;
323d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_jabber_frms;
324d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_64_frms;
325d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_65_127_frms;
326d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_128_255_frms;
327d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_256_511_frms;
328d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_512_1023_frms;
329d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_1024_1518_frms;
330d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_1519_4095_frms;
331d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_4096_8191_frms;
332d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_8192_max_frms;
333d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ttl_gt_max_frms;
334d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ip;
335d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_accepted_ip;
336d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_ip_octets;
337d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_err_ip;
338d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_icmp;
339d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_tcp;
340d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_udp;
341d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_err_tcp;
342d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_lost_frms;
343d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_lost_ip;
344d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_lost_ip_offload;
345d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_various_discard;
346d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_sleep_discard;
347d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_red_discard;
348d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_queue_full_discard;
349d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_stats.rx_mpa_ok_frms;
350d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
351d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = 0;
352d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	for (k = 0; k < vdev->max_config_port; k++) {
353d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].tx_frms;
354d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].tx_data_octets;
355d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].tx_mcast_frms;
356d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].tx_bcast_frms;
357d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].tx_discarded_frms;
358d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].tx_errored_frms;
359d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].rx_frms;
360d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].rx_data_octets;
361d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].rx_mcast_frms;
362d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].rx_bcast_frms;
363d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].rx_discarded_frms;
364d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].rx_errored_frms;
365d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->aggr_stats[k].rx_unknown_slow_proto_frms;
366d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
367d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = 0;
368d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	for (k = 0; k < vdev->max_config_port; k++) {
369d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_ttl_frms;
370d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_ttl_octets;
371d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_data_octets;
372d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_mcast_frms;
373d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_bcast_frms;
374d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_ucast_frms;
375d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_tagged_frms;
376d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_vld_ip;
377d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_vld_ip_octets;
378d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_icmp;
379d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_tcp;
380d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_rst_tcp;
381d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_udp;
382d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_parse_error;
383d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_unknown_protocol;
384d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_pause_ctrl_frms;
385d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_marker_pdu_frms;
386d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_lacpdu_frms;
387d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_drop_ip;
388d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_marker_resp_pdu_frms;
389d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_xgmii_char2_match;
390d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_xgmii_char1_match;
391d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_xgmii_column2_match;
392d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_xgmii_column1_match;
393d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_any_err_frms;
394d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].tx_drop_frms;
395d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_frms;
396d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_vld_frms;
397d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_offload_frms;
398d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_octets;
399d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_data_octets;
400d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_offload_octets;
401d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_vld_mcast_frms;
402d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_vld_bcast_frms;
403d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_accepted_ucast_frms;
404d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_accepted_nucast_frms;
405d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_tagged_frms;
406d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_long_frms;
407d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_usized_frms;
408d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_osized_frms;
409d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_frag_frms;
410d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_jabber_frms;
411d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_64_frms;
412d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_65_127_frms;
413d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_128_255_frms;
414d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_256_511_frms;
415d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_512_1023_frms;
416d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_1024_1518_frms;
417d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_1519_4095_frms;
418d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_4096_8191_frms;
419d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_8192_max_frms;
420d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ttl_gt_max_frms;
421d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ip;
422d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_accepted_ip;
423d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_ip_octets;
424d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_err_ip;
425d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_icmp;
426d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_tcp;
427d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_udp;
428d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_err_tcp;
429d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_pause_count;
430d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_pause_ctrl_frms;
431d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_unsup_ctrl_frms;
432d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_fcs_err_frms;
433d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_in_rng_len_err_frms;
434d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_out_rng_len_err_frms;
435d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_drop_frms;
436d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_discarded_frms;
437d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_drop_ip;
438d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_drop_udp;
439d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_marker_pdu_frms;
440d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_lacpdu_frms;
441d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_unknown_pdu_frms;
442d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_marker_resp_pdu_frms;
443d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_fcs_discard;
444d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_illegal_pdu_frms;
445d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_switch_discard;
446d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_len_discard;
447d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_rpa_discard;
448d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_l2_mgmt_discard;
449d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_rts_discard;
450d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_trash_discard;
451d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_buff_full_discard;
452d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_red_discard;
453d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_xgmii_ctrl_err_cnt;
454d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_xgmii_data_err_cnt;
455d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_xgmii_char1_match;
456d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_xgmii_err_sym;
457d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_xgmii_column1_match;
458d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_xgmii_char2_match;
459d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_local_fault;
460d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_xgmii_column2_match;
461d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_jettison;
462d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = xmac_stats->port_stats[k].rx_remote_fault;
463d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
464d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
465d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = 0;
466d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	for (k = 0; k < vdev->no_of_vpath; k++) {
467d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		struct vxge_hw_vpath_stats_sw_info *vpath_info;
468d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
469d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vpath = &vdev->vpaths[k];
470d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		j = vpath->device_id;
471d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vpath_info = (struct vxge_hw_vpath_stats_sw_info *)
472d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&sw_stats->vpath_info[j];
473d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->soft_reset_cnt;
474d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.unknown_alarms;
475d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.network_sustained_fault;
476d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.network_sustained_ok;
477d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.kdfcctl_fifo0_overwrite;
478d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.kdfcctl_fifo0_poison;
479d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.kdfcctl_fifo0_dma_error;
480d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.dblgen_fifo0_overflow;
481d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.statsb_pif_chain_error;
482d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.statsb_drop_timeout;
483d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.target_illegal_access;
484d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.ini_serr_det;
485d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.prc_ring_bumps;
486d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.prc_rxdcm_sc_err;
487d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.prc_rxdcm_sc_abort;
488d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->error_stats.prc_quanta_size_err;
489d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ring_stats.common_stats.full_cnt;
490d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ring_stats.common_stats.usage_cnt;
491d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ring_stats.common_stats.usage_max;
492d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ring_stats.common_stats.
493d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					reserve_free_swaps_cnt;
494d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ring_stats.common_stats.total_compl_cnt;
495d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		for (j = 0; j < VXGE_HW_DTR_MAX_T_CODE; j++)
496d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			*ptr++ = vpath_info->ring_stats.rxd_t_code_err_cnt[j];
497d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->fifo_stats.common_stats.full_cnt;
498d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->fifo_stats.common_stats.usage_cnt;
499d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->fifo_stats.common_stats.usage_max;
500d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->fifo_stats.common_stats.
501d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa						reserve_free_swaps_cnt;
502d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->fifo_stats.common_stats.total_compl_cnt;
503d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->fifo_stats.total_posts;
504d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->fifo_stats.total_buffers;
505d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		for (j = 0; j < VXGE_HW_DTR_MAX_T_CODE; j++)
506d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			*ptr++ = vpath_info->fifo_stats.txd_t_code_err_cnt[j];
507d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
508d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
509d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = 0;
510d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	for (k = 0; k < vdev->no_of_vpath; k++) {
511d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		struct vxge_hw_vpath_stats_hw_info *vpath_info;
512d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vpath = &vdev->vpaths[k];
513d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		j = vpath->device_id;
514d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vpath_info = hw_stats->vpath_info[j];
515d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		if (!vpath_info) {
516d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			memset(ptr, 0, VXGE_HW_VPATH_STATS_LEN * sizeof(u64));
517d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			ptr += VXGE_HW_VPATH_STATS_LEN;
518d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			continue;
519d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
520d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ini_num_mwr_sent;
521d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ini_num_mrd_sent;
522d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ini_num_cpl_rcvd;
523d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ini_num_mwr_byte_sent;
524d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->ini_num_cpl_byte_rcvd;
525d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->wrcrdtarb_xoff;
526d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rdcrdtarb_xoff;
527d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->vpath_genstats_count0;
528d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->vpath_genstats_count1;
529d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->vpath_genstats_count2;
530d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->vpath_genstats_count3;
531d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->vpath_genstats_count4;
532d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->vpath_genstats_count5;
533d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->prog_event_vnum0;
534d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->prog_event_vnum1;
535d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->prog_event_vnum2;
536d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->prog_event_vnum3;
537d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_multi_cast_frame_discard;
538d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_frm_transferred;
539d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rxd_returned;
540d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_mpa_len_fail_frms;
541d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_mpa_mrk_fail_frms;
542d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_mpa_crc_fail_frms;
543d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_permitted_frms;
544d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_vp_reset_discarded_frms;
545d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->rx_wol_frms;
546d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr++ = vpath_info->tx_vp_reset_discarded_frms;
547d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
548d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
549d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = 0;
550d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = vdev->stats.vpaths_open;
551d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = vdev->stats.vpath_open_fail;
552d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = vdev->stats.link_up;
553d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	*ptr++ = vdev->stats.link_down;
554d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
555d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	for (k = 0; k < vdev->no_of_vpath; k++) {
556d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*ptr += vdev->vpaths[k].fifo.stats.tx_frms;
557d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 1) += vdev->vpaths[k].fifo.stats.tx_errors;
558d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 2) += vdev->vpaths[k].fifo.stats.tx_bytes;
559d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 3) += vdev->vpaths[k].fifo.stats.txd_not_free;
560d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 4) += vdev->vpaths[k].fifo.stats.txd_out_of_desc;
561d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 5) += vdev->vpaths[k].ring.stats.rx_frms;
562d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 6) += vdev->vpaths[k].ring.stats.rx_errors;
563d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 7) += vdev->vpaths[k].ring.stats.rx_bytes;
564d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 8) += vdev->vpaths[k].ring.stats.rx_mcast;
565d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 9) += vdev->vpaths[k].fifo.stats.pci_map_fail +
566d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				vdev->vpaths[k].ring.stats.pci_map_fail;
567d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		*(ptr + 10) += vdev->vpaths[k].ring.stats.skb_alloc_fail;
568d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
569d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
570d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	ptr += 12;
571d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
572d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	kfree(xmac_stats);
573d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	kfree(sw_stats);
574d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	kfree(hw_stats);
575d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
576d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
577d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_ethtool_get_strings(struct net_device *dev,
578d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			      u32 stringset, u8 *data)
579d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
580d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	int stat_size = 0;
581d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	int i, j;
582d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
583d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	switch (stringset) {
584d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	case ETH_SS_STATS:
585d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_add_string("VPATH STATISTICS%s\t\t\t",
586d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			&stat_size, data, "");
587d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		for (i = 0; i < vdev->no_of_vpath; i++) {
588d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_ttl_eth_frms_%d\t\t\t",
589d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
590d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_ttl_eth_octects_%d\t\t",
591d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
592d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_data_octects_%d\t\t\t",
593d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
594d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_mcast_frms_%d\t\t\t",
595d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
596d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_bcast_frms_%d\t\t\t",
597d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
598d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_ucast_frms_%d\t\t\t",
599d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
600d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_tagged_frms_%d\t\t\t",
601d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
602d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_vld_ip_%d\t\t\t",
603d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
604d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_vld_ip_octects_%d\t\t",
605d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
606d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_icmp_%d\t\t\t\t",
607d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
608d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_tcp_%d\t\t\t\t",
609d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
610d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_rst_tcp_%d\t\t\t",
611d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
612d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_udp_%d\t\t\t\t",
613d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
614d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_unknown_proto_%d\t\t\t",
615d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
616d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_lost_ip_%d\t\t\t",
617d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
618d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_parse_error_%d\t\t\t",
619d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
620d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_tcp_offload_%d\t\t\t",
621d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
622d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_retx_tcp_offload_%d\t\t",
623d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
624d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_lost_ip_offload_%d\t\t",
625d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
626d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_eth_frms_%d\t\t\t",
627d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
628d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_vld_frms_%d\t\t\t",
629d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
630d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_offload_frms_%d\t\t\t",
631d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
632d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_eth_octects_%d\t\t",
633d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
634d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_data_octects_%d\t\t\t",
635d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
636d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_offload_octects_%d\t\t",
637d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
638d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_vld_mcast_frms_%d\t\t",
639d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
640d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_vld_bcast_frms_%d\t\t",
641d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
642d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_accepted_ucast_frms_%d\t\t",
643d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
644d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_accepted_nucast_frms_%d\t\t",
645d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
646d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_tagged_frms_%d\t\t\t",
647d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
648d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_long_frms_%d\t\t\t",
649d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
650d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_usized_frms_%d\t\t\t",
651d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
652d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_osized_frms_%d\t\t\t",
653d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
654d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_frag_frms_%d\t\t\t",
655d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
656d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_jabber_frms_%d\t\t\t",
657d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
658d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_64_frms_%d\t\t\t",
659d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
660d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_65_127_frms_%d\t\t",
661d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
662d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_128_255_frms_%d\t\t",
663d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
664d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_256_511_frms_%d\t\t",
665d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
666d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_512_1023_frms_%d\t\t",
667d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
668d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_1024_1518_frms_%d\t\t",
669d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
670d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_1519_4095_frms_%d\t\t",
671d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
672d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_4096_8191_frms_%d\t\t",
673d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
674d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_8192_max_frms_%d\t\t",
675d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
676d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_gt_max_frms_%d\t\t",
677d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
678d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ip%d\t\t\t\t",
679d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
680d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_accepted_ip_%d\t\t\t",
681d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
682d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ip_octects_%d\t\t\t",
683d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
684d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_err_ip_%d\t\t\t",
685d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
686d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_icmp_%d\t\t\t\t",
687d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
688d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_tcp_%d\t\t\t\t",
689d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
690d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_udp_%d\t\t\t\t",
691d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
692d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_err_tcp_%d\t\t\t",
693d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
694d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_lost_frms_%d\t\t\t",
695d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
696d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_lost_ip_%d\t\t\t",
697d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
698d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_lost_ip_offload_%d\t\t",
699d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
700d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_various_discard_%d\t\t",
701d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
702d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_sleep_discard_%d\t\t\t",
703d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
704d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_red_discard_%d\t\t\t",
705d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
706d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_queue_full_discard_%d\t\t",
707d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
708d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_mpa_ok_frms_%d\t\t\t",
709d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
710d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
711d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
712d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_add_string("\nAGGR STATISTICS%s\t\t\t\t",
713d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			&stat_size, data, "");
714d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		for (i = 0; i < vdev->max_config_port; i++) {
715d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_frms_%d\t\t\t\t",
716d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
717d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_data_octects_%d\t\t\t",
718d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
719d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_mcast_frms_%d\t\t\t",
720d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
721d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_bcast_frms_%d\t\t\t",
722d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
723d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_discarded_frms_%d\t\t",
724d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
725d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_errored_frms_%d\t\t\t",
726d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
727d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_frms_%d\t\t\t\t",
728d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
729d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_data_octects_%d\t\t\t",
730d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
731d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_mcast_frms_%d\t\t\t",
732d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
733d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_bcast_frms_%d\t\t\t",
734d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
735d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_discarded_frms_%d\t\t",
736d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
737d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_errored_frms_%d\t\t\t",
738d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
739d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_unknown_slow_proto_frms_%d\t",
740d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
741d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
742d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
743d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_add_string("\nPORT STATISTICS%s\t\t\t\t",
744d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			&stat_size, data, "");
745d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		for (i = 0; i < vdev->max_config_port; i++) {
746d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_ttl_frms_%d\t\t\t",
747d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
748d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_ttl_octects_%d\t\t\t",
749d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
750d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_data_octects_%d\t\t\t",
751d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
752d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_mcast_frms_%d\t\t\t",
753d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
754d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_bcast_frms_%d\t\t\t",
755d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
756d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_ucast_frms_%d\t\t\t",
757d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
758d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_tagged_frms_%d\t\t\t",
759d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
760d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_vld_ip_%d\t\t\t",
761d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
762d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_vld_ip_octects_%d\t\t",
763d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
764d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_icmp_%d\t\t\t\t",
765d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
766d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_tcp_%d\t\t\t\t",
767d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
768d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_rst_tcp_%d\t\t\t",
769d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
770d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_udp_%d\t\t\t\t",
771d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
772d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_parse_error_%d\t\t\t",
773d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
774d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_unknown_protocol_%d\t\t",
775d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
776d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_pause_ctrl_frms_%d\t\t",
777d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
778d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_marker_pdu_frms_%d\t\t",
779d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
780d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_lacpdu_frms_%d\t\t\t",
781d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
782d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_drop_ip_%d\t\t\t",
783d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
784d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_marker_resp_pdu_frms_%d\t\t",
785d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
786d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_xgmii_char2_match_%d\t\t",
787d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
788d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_xgmii_char1_match_%d\t\t",
789d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
790d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_xgmii_column2_match_%d\t\t",
791d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
792d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_xgmii_column1_match_%d\t\t",
793d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
794d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_any_err_frms_%d\t\t\t",
795d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
796d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_drop_frms_%d\t\t\t",
797d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
798d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_frms_%d\t\t\t",
799d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
800d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_vld_frms_%d\t\t\t",
801d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
802d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_offload_frms_%d\t\t\t",
803d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
804d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_octects_%d\t\t\t",
805d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
806d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_data_octects_%d\t\t\t",
807d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
808d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_offload_octects_%d\t\t",
809d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
810d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_vld_mcast_frms_%d\t\t",
811d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
812d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_vld_bcast_frms_%d\t\t",
813d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
814d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_accepted_ucast_frms_%d\t\t",
815d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
816d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_accepted_nucast_frms_%d\t\t",
817d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
818d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_tagged_frms_%d\t\t\t",
819d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
820d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_long_frms_%d\t\t\t",
821d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
822d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_usized_frms_%d\t\t\t",
823d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
824d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_osized_frms_%d\t\t\t",
825d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
826d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_frag_frms_%d\t\t\t",
827d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
828d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_jabber_frms_%d\t\t\t",
829d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
830d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_64_frms_%d\t\t\t",
831d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
832d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_65_127_frms_%d\t\t",
833d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
834d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_128_255_frms_%d\t\t",
835d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
836d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_256_511_frms_%d\t\t",
837d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
838d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_512_1023_frms_%d\t\t",
839d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
840d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_1024_1518_frms_%d\t\t",
841d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
842d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_1519_4095_frms_%d\t\t",
843d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
844d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_4096_8191_frms_%d\t\t",
845d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
846d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_8192_max_frms_%d\t\t",
847d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
848d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ttl_gt_max_frms_%d\t\t",
849d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
850d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ip_%d\t\t\t\t",
851d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
852d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_accepted_ip_%d\t\t\t",
853d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
854d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_ip_octets_%d\t\t\t",
855d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
856d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_err_ip_%d\t\t\t",
857d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
858d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_icmp_%d\t\t\t\t",
859d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
860d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_tcp_%d\t\t\t\t",
861d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
862d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_udp_%d\t\t\t\t",
863d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
864d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_err_tcp_%d\t\t\t",
865d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
866d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_pause_count_%d\t\t\t",
867d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
868d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_pause_ctrl_frms_%d\t\t",
869d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
870d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_unsup_ctrl_frms_%d\t\t",
871d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
872d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_fcs_err_frms_%d\t\t\t",
873d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
874d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_in_rng_len_err_frms_%d\t\t",
875d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
876d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_out_rng_len_err_frms_%d\t\t",
877d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
878d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_drop_frms_%d\t\t\t",
879d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
880d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_discard_frms_%d\t\t\t",
881d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
882d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_drop_ip_%d\t\t\t",
883d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
884d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_drop_udp_%d\t\t\t",
885d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
886d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_marker_pdu_frms_%d\t\t",
887d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
888d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_lacpdu_frms_%d\t\t\t",
889d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
890d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_unknown_pdu_frms_%d\t\t",
891d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
892d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_marker_resp_pdu_frms_%d\t\t",
893d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
894d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_fcs_discard_%d\t\t\t",
895d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
896d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_illegal_pdu_frms_%d\t\t",
897d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
898d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_switch_discard_%d\t\t",
899d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
900d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_len_discard_%d\t\t\t",
901d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
902d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_rpa_discard_%d\t\t\t",
903d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
904d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_l2_mgmt_discard_%d\t\t",
905d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
906d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_rts_discard_%d\t\t\t",
907d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
908d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_trash_discard_%d\t\t\t",
909d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
910d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_buff_full_discard_%d\t\t",
911d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
912d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_red_discard_%d\t\t\t",
913d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
914d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_xgmii_ctrl_err_cnt_%d\t\t",
915d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
916d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_xgmii_data_err_cnt_%d\t\t",
917d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
918d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_xgmii_char1_match_%d\t\t",
919d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
920d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_xgmii_err_sym_%d\t\t\t",
921d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
922d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_xgmii_column1_match_%d\t\t",
923d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
924d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_xgmii_char2_match_%d\t\t",
925d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
926d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_local_fault_%d\t\t\t",
927d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
928d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_xgmii_column2_match_%d\t\t",
929d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
930d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_jettison_%d\t\t\t",
931d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
932d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_remote_fault_%d\t\t\t",
933d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
934d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
935d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
936d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_add_string("\n SOFTWARE STATISTICS%s\t\t\t",
937d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			&stat_size, data, "");
938d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		for (i = 0; i < vdev->no_of_vpath; i++) {
939d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("soft_reset_cnt_%d\t\t\t",
940d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
941d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("unknown_alarms_%d\t\t\t",
942d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
943d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("network_sustained_fault_%d\t\t",
944d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
945d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("network_sustained_ok_%d\t\t",
946d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
947d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("kdfcctl_fifo0_overwrite_%d\t\t",
948d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
949d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("kdfcctl_fifo0_poison_%d\t\t",
950d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
951d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("kdfcctl_fifo0_dma_error_%d\t\t",
952d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
953d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("dblgen_fifo0_overflow_%d\t\t",
954d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
955d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("statsb_pif_chain_error_%d\t\t",
956d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
957d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("statsb_drop_timeout_%d\t\t",
958d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
959d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("target_illegal_access_%d\t\t",
960d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
961d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ini_serr_det_%d\t\t\t",
962d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
963d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("prc_ring_bumps_%d\t\t\t",
964d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
965d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("prc_rxdcm_sc_err_%d\t\t\t",
966d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
967d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("prc_rxdcm_sc_abort_%d\t\t",
968d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
969d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("prc_quanta_size_err_%d\t\t",
970d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
971d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ring_full_cnt_%d\t\t\t",
972d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
973d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ring_usage_cnt_%d\t\t\t",
974d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
975d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ring_usage_max_%d\t\t\t",
976d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
977d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ring_reserve_free_swaps_cnt_%d\t",
978d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
979d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ring_total_compl_cnt_%d\t\t",
980d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
981d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			for (j = 0; j < VXGE_HW_DTR_MAX_T_CODE; j++)
982d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				vxge_add_string("rxd_t_code_err_cnt%d_%d\t\t",
983d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, j, i);
984d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("fifo_full_cnt_%d\t\t\t",
985d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
986d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("fifo_usage_cnt_%d\t\t\t",
987d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
988d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("fifo_usage_max_%d\t\t\t",
989d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
990d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("fifo_reserve_free_swaps_cnt_%d\t",
991d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
992d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("fifo_total_compl_cnt_%d\t\t",
993d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
994d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("fifo_total_posts_%d\t\t\t",
995d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
996d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("fifo_total_buffers_%d\t\t",
997d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, i);
998d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			for (j = 0; j < VXGE_HW_DTR_MAX_T_CODE; j++)
999d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				vxge_add_string("txd_t_code_err_cnt%d_%d\t\t",
1000d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, j, i);
1001d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
1002d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1003d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vxge_add_string("\n HARDWARE STATISTICS%s\t\t\t",
1004d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa				&stat_size, data, "");
1005d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		for (i = 0; i < vdev->no_of_vpath; i++) {
1006d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ini_num_mwr_sent_%d\t\t\t",
1007d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1008d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ini_num_mrd_sent_%d\t\t\t",
1009d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1010d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ini_num_cpl_rcvd_%d\t\t\t",
1011d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1012d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ini_num_mwr_byte_sent_%d\t\t",
1013d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1014d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("ini_num_cpl_byte_rcvd_%d\t\t",
1015d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1016d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("wrcrdtarb_xoff_%d\t\t\t",
1017d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1018d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rdcrdtarb_xoff_%d\t\t\t",
1019d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1020d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("vpath_genstats_count0_%d\t\t",
1021d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1022d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("vpath_genstats_count1_%d\t\t",
1023d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1024d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("vpath_genstats_count2_%d\t\t",
1025d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1026d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("vpath_genstats_count3_%d\t\t",
1027d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1028d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("vpath_genstats_count4_%d\t\t",
1029d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1030d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("vpath_genstats_count5_%d\t\t",
1031d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1032d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("prog_event_vnum0_%d\t\t\t",
1033d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1034d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("prog_event_vnum1_%d\t\t\t",
1035d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1036d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("prog_event_vnum2_%d\t\t\t",
1037d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1038d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("prog_event_vnum3_%d\t\t\t",
1039d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1040d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_multi_cast_frame_discard_%d\t",
1041d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1042d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_frm_transferred_%d\t\t",
1043d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1044d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rxd_returned_%d\t\t\t",
1045d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1046d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_mpa_len_fail_frms_%d\t\t",
1047d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1048d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_mpa_mrk_fail_frms_%d\t\t",
1049d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1050d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_mpa_crc_fail_frms_%d\t\t",
1051d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1052d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_permitted_frms_%d\t\t",
1053d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1054d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_vp_reset_discarded_frms_%d\t",
1055d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1056d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("rx_wol_frms_%d\t\t\t",
1057d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1058d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			vxge_add_string("tx_vp_reset_discarded_frms_%d\t",
1059d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa					&stat_size, data, i);
1060d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		}
1061d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1062d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		memcpy(data + stat_size, &ethtool_driver_stats_keys,
1063d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			sizeof(ethtool_driver_stats_keys));
1064d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
1065d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
1066d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1067d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_get_regs_len(struct net_device *dev)
1068d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
1069d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
1070d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1071d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	return sizeof(struct vxge_hw_vpath_reg) * vdev->no_of_vpath;
1072d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
1073d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1074d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic u32 vxge_get_rx_csum(struct net_device *dev)
1075d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
1076d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
1077d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1078d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	return vdev->rx_csum;
1079d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
1080d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1081d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_set_rx_csum(struct net_device *dev, u32 data)
1082d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
1083d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
1084d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1085d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (data)
1086d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vdev->rx_csum = 1;
1087d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	else
1088d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		vdev->rx_csum = 0;
1089d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1090d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	return 0;
1091d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
1092d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1093d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_op_set_tso(struct net_device *dev, u32 data)
1094d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
1095d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	if (data)
1096d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		dev->features |= (NETIF_F_TSO | NETIF_F_TSO6);
1097d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	else
1098d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		dev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6);
1099d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1100d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	return 0;
1101d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
1102d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1103d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_get_sset_count(struct net_device *dev, int sset)
1104d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
1105d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
1106d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
1107d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	switch (sset) {
1108d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	case ETH_SS_STATS:
1109d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		return VXGE_TITLE_LEN +
1110d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			(vdev->no_of_vpath * VXGE_HW_VPATH_STATS_LEN) +
1111d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			(vdev->max_config_port * VXGE_HW_AGGR_STATS_LEN) +
1112d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			(vdev->max_config_port * VXGE_HW_PORT_STATS_LEN) +
1113d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			(vdev->no_of_vpath * VXGE_HW_VPATH_TX_STATS_LEN) +
1114d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			(vdev->no_of_vpath * VXGE_HW_VPATH_RX_STATS_LEN) +
1115d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			(vdev->no_of_vpath * VXGE_SW_STATS_LEN) +
1116d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa			DRIVER_STAT_LEN;
1117d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	default:
1118d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa		return -EOPNOTSUPP;
1119d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	}
1120d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
1121d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
112247f01db44b2470d9517848f6b73c75883ef5fda0Jon Masonstatic int vxge_set_flags(struct net_device *dev, u32 data)
112347f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason{
112447f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
112547f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	enum vxge_hw_status status;
112647f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason
112747f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	if (data & ~ETH_FLAG_RXHASH)
112847f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason		return -EOPNOTSUPP;
112947f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason
113047f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	if (!!(data & ETH_FLAG_RXHASH) == vdev->devh->config.rth_en)
113147f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason		return 0;
113247f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason
113347f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	if (netif_running(dev) || (vdev->config.rth_steering == NO_STEERING))
113447f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason		return -EINVAL;
113547f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason
113647f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	vdev->devh->config.rth_en = !!(data & ETH_FLAG_RXHASH);
113747f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason
113847f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	/* Enabling RTH requires some of the logic in vxge_device_register and a
113947f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	 * vpath reset.  Due to these restrictions, only allow modification
114047f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	 * while the interface is down.
114147f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	 */
114247f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	status = vxge_reset_all_vpaths(vdev);
114347f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	if (status != VXGE_HW_OK) {
114447f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason		vdev->devh->config.rth_en = !vdev->devh->config.rth_en;
114547f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason		return -EFAULT;
114647f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	}
114747f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason
114847f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	if (vdev->devh->config.rth_en)
114947f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason		dev->features |= NETIF_F_RXHASH;
115047f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	else
115147f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason		dev->features &= ~NETIF_F_RXHASH;
115247f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason
115347f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	return 0;
115447f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason}
115547f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason
1156e8ac175615b9458a00193c55617b5b8865e67817Jon Masonstatic int vxge_fw_flash(struct net_device *dev, struct ethtool_flash *parms)
1157e8ac175615b9458a00193c55617b5b8865e67817Jon Mason{
1158e8ac175615b9458a00193c55617b5b8865e67817Jon Mason	struct vxgedev *vdev = (struct vxgedev *)netdev_priv(dev);
1159e8ac175615b9458a00193c55617b5b8865e67817Jon Mason
1160e8ac175615b9458a00193c55617b5b8865e67817Jon Mason	if (vdev->max_vpath_supported != VXGE_HW_MAX_VIRTUAL_PATHS) {
1161e8ac175615b9458a00193c55617b5b8865e67817Jon Mason		printk(KERN_INFO "Single Function Mode is required to flash the"
1162e8ac175615b9458a00193c55617b5b8865e67817Jon Mason		       " firmware\n");
1163e8ac175615b9458a00193c55617b5b8865e67817Jon Mason		return -EINVAL;
1164e8ac175615b9458a00193c55617b5b8865e67817Jon Mason	}
1165e8ac175615b9458a00193c55617b5b8865e67817Jon Mason
1166e8ac175615b9458a00193c55617b5b8865e67817Jon Mason	if (netif_running(dev)) {
1167e8ac175615b9458a00193c55617b5b8865e67817Jon Mason		printk(KERN_INFO "Interface %s must be down to flash the "
1168e8ac175615b9458a00193c55617b5b8865e67817Jon Mason		       "firmware\n", dev->name);
1169e8ac175615b9458a00193c55617b5b8865e67817Jon Mason		return -EBUSY;
1170e8ac175615b9458a00193c55617b5b8865e67817Jon Mason	}
1171e8ac175615b9458a00193c55617b5b8865e67817Jon Mason
1172e8ac175615b9458a00193c55617b5b8865e67817Jon Mason	return vxge_fw_upgrade(vdev, parms->data, 1);
1173e8ac175615b9458a00193c55617b5b8865e67817Jon Mason}
1174e8ac175615b9458a00193c55617b5b8865e67817Jon Mason
1175d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic const struct ethtool_ops vxge_ethtool_ops = {
1176d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_settings		= vxge_ethtool_gset,
1177d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.set_settings		= vxge_ethtool_sset,
1178d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_drvinfo		= vxge_ethtool_gdrvinfo,
1179d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_regs_len		= vxge_ethtool_get_regs_len,
1180d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_regs		= vxge_ethtool_gregs,
1181d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_link		= ethtool_op_get_link,
1182d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_pauseparam		= vxge_ethtool_getpause_data,
1183d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.set_pauseparam		= vxge_ethtool_setpause_data,
1184d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_rx_csum		= vxge_get_rx_csum,
1185d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.set_rx_csum		= vxge_set_rx_csum,
1186d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_tx_csum		= ethtool_op_get_tx_csum,
1187d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.set_tx_csum		= ethtool_op_set_tx_hw_csum,
1188d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_sg			= ethtool_op_get_sg,
1189d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.set_sg			= ethtool_op_set_sg,
1190d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_tso		= ethtool_op_get_tso,
1191d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.set_tso		= vxge_ethtool_op_set_tso,
1192d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_strings		= vxge_ethtool_get_strings,
1193d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.phys_id		= vxge_ethtool_idnic,
1194d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_sset_count		= vxge_ethtool_get_sset_count,
1195d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	.get_ethtool_stats	= vxge_get_ethtool_stats,
119647f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason	.set_flags		= vxge_set_flags,
1197e8ac175615b9458a00193c55617b5b8865e67817Jon Mason	.flash_device		= vxge_fw_flash,
1198d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa};
1199d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa
120042821a5b393e36f5c0b267473d59d375578df7ecstephen hemmingervoid vxge_initialize_ethtool_ops(struct net_device *ndev)
1201d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{
1202d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa	SET_ETHTOOL_OPS(ndev, &vxge_ethtool_ops);
1203d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa}
1204