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