vxge-ethtool.c revision 6d8a7e6f52b0bf646739f2d4bad4643c64977b2a
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 ******************************************************************************/ 142c91308f449c6705b81bd3370a0ec647e370f35cJon Mason#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 Vepastatic int vxge_ethtool_sset(struct net_device *dev, struct ethtool_cmd *info) 33d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 34d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa /* We currently only support 10Gb/FULL */ 35d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa if ((info->autoneg == AUTONEG_ENABLE) || 36d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa (info->speed != SPEED_10000) || (info->duplex != DUPLEX_FULL)) 37d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa return -EINVAL; 38d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 39d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa return 0; 40d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa} 41d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 42d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/** 43d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_gset - Return link specific information. 44d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev: device pointer. 45d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @info: pointer to the structure with parameters given by ethtool 46d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * to return link information. 47d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * 48d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Returns link specific information like speed, duplex etc.. to ethtool. 49d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Return value : 50d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * return 0 on success. 51d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */ 52d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_gset(struct net_device *dev, struct ethtool_cmd *info) 53d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 54d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_FIBRE); 55d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->advertising = (ADVERTISED_10000baseT_Full | ADVERTISED_FIBRE); 56d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->port = PORT_FIBRE; 57d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 58d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->transceiver = XCVR_EXTERNAL; 59d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 60d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa if (netif_carrier_ok(dev)) { 61d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->speed = SPEED_10000; 62d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->duplex = DUPLEX_FULL; 63d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa } else { 64d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->speed = -1; 65d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->duplex = -1; 66d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa } 67d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 68d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->autoneg = AUTONEG_DISABLE; 69d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa return 0; 70d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa} 71d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 72d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/** 73d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_gdrvinfo - Returns driver specific information. 74d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev: device pointer. 75d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @info: pointer to the structure with parameters given by ethtool to 76d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * return driver information. 77d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * 78d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Returns driver specefic information like name, version etc.. to ethtool. 79d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */ 80d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_ethtool_gdrvinfo(struct net_device *dev, 812c91308f449c6705b81bd3370a0ec647e370f35cJon Mason struct ethtool_drvinfo *info) 82d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 835f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = netdev_priv(dev); 84d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa strlcpy(info->driver, VXGE_DRIVER_NAME, sizeof(VXGE_DRIVER_NAME)); 85d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa strlcpy(info->version, DRV_VERSION, sizeof(DRV_VERSION)); 86d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa strlcpy(info->fw_version, vdev->fw_version, VXGE_HW_FW_STRLEN); 87d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa strlcpy(info->bus_info, pci_name(vdev->pdev), sizeof(info->bus_info)); 88d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->regdump_len = sizeof(struct vxge_hw_vpath_reg) 89d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vdev->no_of_vpath; 90d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 91d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa info->n_stats = STAT_LEN; 92d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa} 93d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 94d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/** 95d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_gregs - dumps the entire space of Titan into the buffer. 96d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev: device pointer. 97d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @regs: pointer to the structure with parameters given by ethtool for 98d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * dumping the registers. 99d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @reg_space: The input argumnet into which all the registers are dumped. 100d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * 101d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Dumps the vpath register space of Titan NIC into the user given 102d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * buffer area. 103d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */ 104d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_ethtool_gregs(struct net_device *dev, 1052c91308f449c6705b81bd3370a0ec647e370f35cJon Mason struct ethtool_regs *regs, void *space) 106d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 107d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa int index, offset; 108d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa enum vxge_hw_status status; 109d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa u64 reg; 1102c91308f449c6705b81bd3370a0ec647e370f35cJon Mason u64 *reg_space = (u64 *)space; 1115f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = netdev_priv(dev); 1122c91308f449c6705b81bd3370a0ec647e370f35cJon Mason struct __vxge_hw_device *hldev = vdev->devh; 113d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 114d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa regs->len = sizeof(struct vxge_hw_vpath_reg) * vdev->no_of_vpath; 115d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa regs->version = vdev->pdev->subsystem_device; 116d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa for (index = 0; index < vdev->no_of_vpath; index++) { 117d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa for (offset = 0; offset < sizeof(struct vxge_hw_vpath_reg); 118d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa offset += 8) { 119d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa status = vxge_hw_mgmt_reg_read(hldev, 120d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa vxge_hw_mgmt_reg_type_vpath, 121d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa vdev->vpaths[index].device_id, 122d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa offset, ®); 123d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa if (status != VXGE_HW_OK) { 124d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa vxge_debug_init(VXGE_ERR, 125d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa "%s:%d Getting reg dump Failed", 126d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa __func__, __LINE__); 127d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa return; 128d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa } 1294c5f3b210f53e315e460d539655a8d14595c5d1aSreenivasa Honnur *reg_space++ = reg; 130d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa } 131d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa } 132d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa} 133d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 134d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/** 135d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_idnic - To physically identify the nic on the system. 136d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev : device pointer. 1376d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger * @state : requested LED state 138d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * 139d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Used to physically identify the NIC on the system. 140d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * 0 on success 141d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */ 1426d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemmingerstatic int vxge_ethtool_idnic(struct net_device *dev, 1436d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger enum ethtool_phys_id_state state) 144d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 1455f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = netdev_priv(dev); 1462c91308f449c6705b81bd3370a0ec647e370f35cJon Mason struct __vxge_hw_device *hldev = vdev->devh; 147d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 1486d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger switch (state) { 1496d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger case ETHTOOL_ID_ACTIVE: 1506d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger vxge_hw_device_flick_link_led(hldev, VXGE_FLICKER_ON); 1516d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger break; 1526d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger 1536d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger case ETHTOOL_ID_INACTIVE: 1546d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger vxge_hw_device_flick_link_led(hldev, VXGE_FLICKER_OFF); 1556d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger break; 1566d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger 1576d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger default: 1586d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger return -EINVAL; 1596d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger } 160d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 161d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa return 0; 162d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa} 163d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 164d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/** 165d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_getpause_data - Pause frame frame generation and reception. 166d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev : device pointer. 167d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @ep : pointer to the structure with pause parameters given by ethtool. 168d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Description: 169d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Returns the Pause frame generation and reception capability of the NIC. 170d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Return value: 171d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * void 172d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */ 173d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_ethtool_getpause_data(struct net_device *dev, 1742c91308f449c6705b81bd3370a0ec647e370f35cJon Mason struct ethtool_pauseparam *ep) 175d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 1765f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = netdev_priv(dev); 1772c91308f449c6705b81bd3370a0ec647e370f35cJon Mason struct __vxge_hw_device *hldev = vdev->devh; 178d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 179d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa vxge_hw_device_getpause_data(hldev, 0, &ep->tx_pause, &ep->rx_pause); 180d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa} 181d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 182d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa/** 183d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * vxge_ethtool_setpause_data - set/reset pause frame generation. 184d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @dev : device pointer. 185d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * @ep : pointer to the structure with pause parameters given by ethtool. 186d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Description: 187d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * It can be used to set or reset Pause frame generation or reception 188d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * support of the NIC. 189d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * Return value: 190d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa * int, returns 0 on Success 191d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa */ 192d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic int vxge_ethtool_setpause_data(struct net_device *dev, 1932c91308f449c6705b81bd3370a0ec647e370f35cJon Mason struct ethtool_pauseparam *ep) 194d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 1955f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = netdev_priv(dev); 1962c91308f449c6705b81bd3370a0ec647e370f35cJon Mason struct __vxge_hw_device *hldev = vdev->devh; 197d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 198d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa vxge_hw_device_setpause_data(hldev, 0, ep->tx_pause, ep->rx_pause); 199d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 200d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa vdev->config.tx_pause_enable = ep->tx_pause; 201d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa vdev->config.rx_pause_enable = ep->rx_pause; 202d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 203d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa return 0; 204d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa} 205d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa 206d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepastatic void vxge_get_ethtool_stats(struct net_device *dev, 207d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa struct ethtool_stats *estats, u64 *tmp_stats) 208d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 209d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa int j, k; 210d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa enum vxge_hw_status status; 211d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa enum vxge_hw_status swstatus; 212d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa struct vxge_vpath *vpath = NULL; 2135f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = netdev_priv(dev); 2142c91308f449c6705b81bd3370a0ec647e370f35cJon Mason 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 5772c91308f449c6705b81bd3370a0ec647e370f35cJon Masonstatic void vxge_ethtool_get_strings(struct net_device *dev, u32 stringset, 5782c91308f449c6705b81bd3370a0ec647e370f35cJon Mason u8 *data) 579d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa{ 580d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa int stat_size = 0; 581d26078fe7276e9de4eed7f3edcab41a2e8a045c8Ramkrishna Vepa int i, j; 5825f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = 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, ðtool_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{ 10695f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = 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{ 10765f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = 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{ 10835f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = 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{ 11055f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = 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{ 11245f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = netdev_priv(dev); 112547f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason enum vxge_hw_status status; 112647f01db44b2470d9517848f6b73c75883ef5fda0Jon Mason 1127673e63c688f43104c73aad8ea4237f7ad41fa14dStanislaw Gruszka if (ethtool_invalid_flags(dev, data, ETH_FLAG_RXHASH)) 1128673e63c688f43104c73aad8ea4237f7ad41fa14dStanislaw Gruszka return -EINVAL; 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{ 11585f54cebb13cdb8dcd85036f8bee29f14db18b6e1Joe Perches struct vxgedev *vdev = 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, 11877903264402546f45f9bac8ad2bfdb00d00eb124aMichał Mirosław .set_tx_csum = ethtool_op_set_tx_ipv6_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, 11936d8a7e6f52b0bf646739f2d4bad4643c64977b2astephen hemminger .set_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