e1000g_stat.c revision 7941757c1241fe30e30f921910595c8ac6af9ef1
/*
* This file is provided under a CDDLv1 license. When using or
* redistributing this file, you may do so under this license.
* In redistributing this file this license must be included
* and no other modification of this header file is permitted.
*
* CDDL LICENSE SUMMARY
*
* Copyright(c) 1999 - 2007 Intel Corporation. All rights reserved.
*
* The contents of this file are subject to the terms of Version
* 1.0 of the Common Development and Distribution License (the "License").
*
* You should have received a copy of the License with this software.
* You can obtain a copy of the License at
* See the License for the specific language governing permissions
* and limitations under the License.
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms of the CDDLv1.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* **********************************************************************
* *
* Module Name: e1000g_stat.c *
* *
* Abstract: Functions for displaying statistics *
* *
* **********************************************************************
*/
#include "e1000g_sw.h"
#include "e1000g_debug.h"
/*
* **********************************************************************
* *
* Name: AdjustTbiAcceptedStats *
* *
* Description: Adjusts statistic counters when a frame is accepted *
* under the TBI workaround. This function has been *
* adapted for Solaris from shared code. *
* *
* Author: Bill Campbell *
* *
* Born on Date: 4/12/2001 *
* *
* Arguments: *
* Adapter - Ptr to this card's adapter data structure. *
* FrameLength - Length as reported from Hardware *
* MacAddress - Pointer to MAC address field in frame. *
* *
* Returns: *
* VOID *
* *
* **********************************************************************
*/
void
{
/*
* First adjust the frame length.
*/
FrameLength--;
/*
* We need to adjust the statistics counters, since the hardware
* counters overcount this packet as a CRC error and undercount
* the packet as a good packet
*/
/*
* This packet should not be counted as a CRC error.
*/
/*
* This packet does count as a Good Packet Received.
*/
/*
* Adjust the Good Octets received counters
*/
/*
* If the high bit of Gorcl (the low 32 bits of the Good Octets
* Received Count) was one before the addition,
* AND it is zero after, then we lost the carry out,
* need to add one to Gorch (Good Octets Received Count High).
* This could be simplified if all environments supported
* 64-bit integers.
*/
}
/*
* Is this a broadcast or multicast? Check broadcast first,
* since the test for a multicast frame will test positive on
* a broadcast frame.
*/
/*
* Broadcast packet
*/
} else if (*MacAddress & 0x01) {
/*
* Multicast packet
*/
}
/*
* In this case, the hardware has overcounted the number of
* oversize frames.
*/
}
/*
* Adjust the bin counters when the extra byte put the frame in the
* wrong bin. Remember that the FrameLength was adjusted above.
*/
if (FrameLength == 64) {
} else if (FrameLength == 127) {
} else if (FrameLength == 255) {
} else if (FrameLength == 511) {
} else if (FrameLength == 1023) {
} else if (FrameLength == 1522) {
}
}
/*
* **********************************************************************
* Name: UpdateStatsCounters *
* *
* Description: This routine will dump and reset the 1000's internal *
* Statistics counters. The current stats dump values will *
* be sent to the kernel status area. *
* *
* Author: Phil Cayton *
* *
* Born on Date: 7/13/98 *
* *
* Arguments: *
* *ksp - A kernel stat pointer *
* *
* Returns: *
* (EACCES) If an attempt is made to write stats to the hw *
* (0) On successful read of statistics to kernel stats. *
* *
* File: e1000g_stat.c *
* *
* Modification log: *
* Date Who Description *
* -------- --- ------------------------------------------------------*
* Sept 10,99 Vinay New Counters for Livengood have been added. *
* **********************************************************************
*/
static int
{
if (rw == KSTAT_WRITE)
return (EACCES);
/*
* Mutex required if in TBI mode
*/
}
/*
* Standard Stats
*/
/*
* The 64-bit register will reset whenever the upper
* 32 bits are read. So we need to read the lower
* 32 bits first, then read the upper 32 bits.
*/
/*
* Adaptive Calculations
*/
/*
* Livengood Counters
*/
/*
* Mutex required if in TBI mode
*/
}
return (0);
}
int
{
switch (stat) {
case MAC_STAT_IFSPEED:
break;
case MAC_STAT_MULTIRCV:
break;
case MAC_STAT_BRDCSTRCV:
break;
case MAC_STAT_MULTIXMT:
break;
case MAC_STAT_BRDCSTXMT:
break;
case MAC_STAT_NORCVBUF:
break;
case MAC_STAT_IERRORS:
break;
case MAC_STAT_NOXMTBUF:
break;
case MAC_STAT_OERRORS:
break;
case MAC_STAT_COLLISIONS:
break;
case MAC_STAT_RBYTES:
/*
* The 64-bit register will reset whenever the upper
* 32 bits are read. So we need to read the lower
* 32 bits first, then read the upper 32 bits.
*/
break;
case MAC_STAT_IPACKETS:
break;
case MAC_STAT_OBYTES:
/*
* The 64-bit register will reset whenever the upper
* 32 bits are read. So we need to read the lower
* 32 bits first, then read the upper 32 bits.
*/
break;
case MAC_STAT_OPACKETS:
break;
case ETHER_STAT_ALIGN_ERRORS:
break;
case ETHER_STAT_FCS_ERRORS:
break;
case ETHER_STAT_SQE_ERRORS:
break;
break;
case ETHER_STAT_EX_COLLISIONS:
break;
break;
case ETHER_STAT_DEFER_XMTS:
break;
break;
break;
case ETHER_STAT_MACRCV_ERRORS:
break;
case ETHER_STAT_MACXMT_ERRORS:
break;
break;
case ETHER_STAT_XCVR_ADDR:
/* The Internal PHY's MDI address for each MAC is 1 */
*val = 1;
break;
case ETHER_STAT_XCVR_ID:
break;
case ETHER_STAT_XCVR_INUSE:
switch (Adapter->link_speed) {
case SPEED_1000:
*val =
break;
case SPEED_100:
*val =
break;
case SPEED_10:
break;
default:
break;
}
break;
case ETHER_STAT_CAP_1000FDX:
&phy_reg);
break;
case ETHER_STAT_CAP_1000HDX:
&phy_reg);
break;
case ETHER_STAT_CAP_100FDX:
break;
case ETHER_STAT_CAP_100HDX:
break;
case ETHER_STAT_CAP_10FDX:
break;
case ETHER_STAT_CAP_10HDX:
break;
case ETHER_STAT_CAP_ASMPAUSE:
&phy_reg);
break;
case ETHER_STAT_CAP_PAUSE:
&phy_reg);
break;
case ETHER_STAT_CAP_AUTONEG:
break;
&phy_reg);
break;
&phy_reg);
break;
&phy_reg);
break;
&phy_reg);
break;
case ETHER_STAT_ADV_CAP_10FDX:
&phy_reg);
break;
case ETHER_STAT_ADV_CAP_10HDX:
&phy_reg);
break;
&phy_reg);
break;
case ETHER_STAT_ADV_CAP_PAUSE:
&phy_reg);
break;
break;
&phy_reg);
break;
&phy_reg);
break;
case ETHER_STAT_LP_CAP_100FDX:
&phy_reg);
break;
case ETHER_STAT_LP_CAP_100HDX:
&phy_reg);
break;
case ETHER_STAT_LP_CAP_10FDX:
&phy_reg);
break;
case ETHER_STAT_LP_CAP_10HDX:
&phy_reg);
break;
&phy_reg);
break;
case ETHER_STAT_LP_CAP_PAUSE:
&phy_reg);
break;
&phy_reg);
break;
case ETHER_STAT_LINK_ASMPAUSE:
&phy_reg);
break;
case ETHER_STAT_LINK_PAUSE:
&phy_reg);
break;
case ETHER_STAT_LINK_AUTONEG:
break;
case ETHER_STAT_LINK_DUPLEX:
break;
default:
return (ENOTSUP);
}
return (0);
}
/*
* **********************************************************************
* Name: InitStatsCounters *
* *
* Description: This routine will create and initialize the kernel *
* statistics counters. *
* *
* Author: Phil Cayton *
* *
* Born on Date: 7/13/98 *
* *
* Arguments: *
* Adapter - A pointer to our context sensitive "Adapter" *
* structure. *
* *
* Returns: *
* '0' if unable to create kernel statistics structure. *
* '1' if creation and initialization successful *
* *
* File: e1000g_stat.c *
* *
* Modification log: *
* Date Who Description *
* -------- --- ------------------------------------------------------*
* *
* **********************************************************************
*/
int
{
/*
* Create and init kstat
*/
sizeof (e1000gstat) / sizeof (kstat_named_t), 0);
"Could not create kernel statistics\n");
return (DDI_FAILURE);
}
/*
* Initialize all the statistics
*/
"Tx Send Failure", KSTAT_DATA_ULONG);
"Tx Bind Multi Cookies", KSTAT_DATA_ULONG);
"Tx Desc Recycle", KSTAT_DATA_ULONG);
"Tx Desc Recycle Retry", KSTAT_DATA_ULONG);
"Tx Desc Recycle Intr", KSTAT_DATA_ULONG);
"Tx Desc Recycled None", KSTAT_DATA_ULONG);
"Tx Stall Watchdog", KSTAT_DATA_ULONG);
"Reset Count", KSTAT_DATA_ULONG);
"Interrupt Type", KSTAT_DATA_ULONG);
/*
* Livengood Initializations
*/
/*
* Jumbo Frame Counters
*/
/*
* Function to provide kernel stat update on demand
*/
/*
* Pointer into provider's raw statistics
*/
/*
* Add kstat to systems kstat chain
*/
return (DDI_SUCCESS);
}