e1000g_stat.c revision 47b7744cbea59975a6b583125b7ed1ff2ac45313
/*
* 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 - 2008 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 2008 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 processing statistics *
* *
* **********************************************************************
*/
#include "e1000g_sw.h"
#include "e1000g_debug.h"
/*
* e1000_tbi_adjust_stats
*
* Adjusts statistic counters when a frame is accepted
* under the TBI workaround. This function has been
* adapted for Solaris from shared code.
*/
void
{
/* First adjust the frame length */
frame_len--;
/*
* 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 (*mac_addr & 0x01) {
/*
* Multicast packet
*/
}
/*
* In this case, the hardware has overcounted the number of
* oversize frames.
*/
}
#ifdef E1000G_DEBUG
/*
* Adjust the bin counters when the extra byte put the frame in the
* wrong bin. Remember that the frame_len was adjusted above.
*/
if (frame_len == 64) {
} else if (frame_len == 127) {
} else if (frame_len == 255) {
} else if (frame_len == 511) {
} else if (frame_len == 1023) {
} else if (frame_len == 1522) {
}
#endif
}
/*
* e1000g_update_stats - update driver private kstat counters
*
* This routine will dump and reset the e1000's internal
* statistics counters. The current stats dump values will
* be sent to the kernel status area.
*/
static int
{
if (rw == KSTAT_WRITE)
return (EACCES);
#ifdef E1000G_DEBUG
#endif
/*
* Standard Stats
*/
#ifdef E1000G_DEBUG
#endif
}
/*
* Adaptive Calculations
*/
/*
* 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.
*/
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:
break;
case ETHER_STAT_CAP_1000HDX:
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:
break;
case ETHER_STAT_CAP_PAUSE:
break;
case ETHER_STAT_CAP_AUTONEG:
break;
break;
break;
break;
break;
case ETHER_STAT_ADV_CAP_10FDX:
break;
case ETHER_STAT_ADV_CAP_10HDX:
break;
break;
case ETHER_STAT_ADV_CAP_PAUSE:
break;
break;
*val =
break;
*val =
break;
case ETHER_STAT_LP_CAP_100FDX:
break;
case ETHER_STAT_LP_CAP_100HDX:
break;
case ETHER_STAT_LP_CAP_10FDX:
break;
case ETHER_STAT_LP_CAP_10HDX:
break;
break;
case ETHER_STAT_LP_CAP_PAUSE:
break;
break;
case ETHER_STAT_LINK_ASMPAUSE:
break;
case ETHER_STAT_LINK_PAUSE:
break;
case ETHER_STAT_LINK_AUTONEG:
break;
case ETHER_STAT_LINK_DUPLEX:
break;
default:
return (ENOTSUP);
}
return (0);
}
/*
* e1000g_init_stats - initialize kstat data structures
*
* This routine will create and initialize the driver private
* statistics counters.
*/
int
{
/*
* Create and init kstat
*/
sizeof (e1000g_stat_t) / sizeof (kstat_named_t), 0);
"Could not create kernel statistics\n");
return (DDI_FAILURE);
}
/*
* Initialize all the statistics
*/
#ifdef E1000G_DEBUG
#endif
#ifdef E1000G_DEBUG
#endif
#ifdef E1000G_DEBUG
#endif
/*
* Function to provide kernel stat update on demand
*/
/*
* Pointer into provider's raw statistics
*/
/*
* Add kstat to systems kstat chain
*/
return (DDI_SUCCESS);
}