Esempio n. 1
0
static void
__hal_stats_save (xge_hal_stats_t *stats)
{
	xge_hal_device_t *hldev = (xge_hal_device_t*)stats->devh;

	if (xge_hal_device_check_id(hldev) != XGE_HAL_CARD_TITAN) {
	    xge_hal_stats_hw_info_t *latest;

	    (void) xge_hal_stats_hw(stats->devh, &latest);

	    xge_os_memcpy(&stats->hw_info_saved, stats->hw_info,
	          sizeof(xge_hal_stats_hw_info_t));
	} else {
	    xge_hal_stats_pcim_info_t   *latest;

	    (void) xge_hal_stats_pcim(stats->devh, &latest);

	    xge_os_memcpy(stats->pcim_info_saved, stats->pcim_info,
	          sizeof(xge_hal_stats_pcim_info_t));
	}
}
Esempio n. 2
0
/* 
 * xmpGetStatsCounters
 *
 * Description:
 *   Get Statistics Counters
 *b
 * Arguments:
 *
 *   MiniportAdapterContext  Pointer to the adapter structure
 *   NdisRequest             Pointer to the query request
 *
 *  Return Value:
 *   
 *   NDIS_STATUS_SUCCESS
 *   NDIS_STATUS_NOT_SUPPORTED
 *   NDIS_STATUS_BUFFER_TOO_SHORT
 *
 *  IRQL: <= DISPATCH_LEVEL
 *
 *  Notes:
 */
NDIS_STATUS
xmpGetStatsCounters( 
  IN  xmpNicCtx_t            *pNicCtx,
  IN  NDIS_OID                Oid,
  OUT U64                    *pCounter )

/*++
Routine Description:

    Get the value for a statistics OID

Arguments:

    pNic        Pointer to our adapter 
    Oid         Oid  
    pCounter    Pointer to receive the value
    
Return Value:

    NDIS_STATUS_SUCCESS
    NDIS_STATUS_NOT_SUPPORTED
    
--*/
{
  xge_hal_stats_hw_info_t     *stats;
  xge_hal_device_t            *pHalDev;
  xge_hal_status_e              halStatus;
  xmpOidStats_t               *swStats;
  NDIS_STATUS                  Status = NDIS_STATUS_SUCCESS;

  swStats = &pNicCtx->OidStats;
  pHalDev = XMP_NIC_GET_DEV(pNicCtx);
  *pCounter = 0;
  if ((halStatus = xge_hal_stats_hw(pHalDev, &stats))!=  XGE_HAL_OK)
  {
    XMPTRACE(XMP_DBG_REQ, ("xmpGetStatsCounters failed=%X\n", halStatus));
    return NDIS_STATUS_FAILURE;
  }

  ASSERT(stats);

  switch( Oid )
  {
  case OID_GEN_XMIT_OK:
    /*    *pCounter = stats->tmac_frms;*/
    *pCounter = (swStats->txDirFrames + swStats->txMcastFrames + 
                 swStats->txBcastFrames);
    break;

  case OID_GEN_RCV_OK:
    /* *pCounter = stats->rmac_vld_frms; */
    *pCounter = (swStats->rxDirFrames + swStats->rxMcastFrames + 
                 swStats->rxBcastFrames);
    break;

  case OID_GEN_XMIT_ERROR:
    /*    *pCounter = stats->tmac_drop_frms + stats->tmac_any_err_frms;*/
    *pCounter = swStats->txErrFrames;
    break;

  case OID_GEN_RCV_ERROR:
    /* *pCounter = stats->rmac_drop_frms;*/
    *pCounter = swStats->rxErrFrames;
    break;

  case OID_GEN_RCV_NO_BUFFER:
    *pCounter = stats->rmac_drop_frms;
    break;

  case OID_GEN_RCV_CRC_ERROR:
    *pCounter = stats->rmac_fcs_err_frms;
    break;

  case OID_GEN_RCV_DISCARDS:
    *pCounter = stats->rmac_discarded_frms;
    break;

  case OID_GEN_TRANSMIT_QUEUE_LENGTH:
    {
      UINT Queue;
      for ( Queue=0; Queue < pNicCtx->RegParams.TxFIFONum; Queue++ )
        *pCounter += pNicCtx->TxFifo[Queue].OsSendCnt;
    }
    break;

  case OID_802_3_XMIT_ONE_COLLISION:
  case OID_802_3_XMIT_MORE_COLLISIONS:
  case OID_802_3_XMIT_MAX_COLLISIONS:
    *pCounter = 0;
    break;

  case OID_802_3_RCV_ERROR_ALIGNMENT:
    *pCounter = stats->rmac_fcs_err_frms;
    break;

    case OID_GEN_DIRECTED_FRAMES_RCV:
    /* *pCounter =( stats->rmac_vld_frms - (stats->rmac_vld_mcst_frms + 
    stats->rmac_vld_bcst_frms) );*/
    *pCounter = swStats->rxDirFrames;
    break;

  case OID_GEN_DIRECTED_FRAMES_XMIT:
    /* *pCounter = stats->tmac_ucst_frms; */
    *pCounter = swStats->txDirFrames;
    break;

  case OID_GEN_MULTICAST_FRAMES_RCV:
    /* *pCounter = stats->rmac_vld_mcst_frms; */
    *pCounter = swStats->rxMcastFrames;
    break;

  case OID_GEN_MULTICAST_FRAMES_XMIT:
    /* *pCounter = stats->tmac_mcst_frms; */
    *pCounter = swStats->txMcastFrames;
    break;

 case OID_GEN_BROADCAST_FRAMES_RCV:
   /* *pCounter = stats->rmac_vld_bcst_frms; */
    *pCounter = swStats->rxBcastFrames;
    break;

  case OID_GEN_BROADCAST_FRAMES_XMIT:
    /* *pCounter = stats->tmac_bcst_frms;*/
    *pCounter = swStats->txBcastFrames;
    break;

  case OID_GEN_STATISTICS:
    {
      NDIS_STATISTICS_INFO *pStats = (NDIS_STATISTICS_INFO *)pCounter;
      XENAMP_NDIS_OBJECT_INIT(&pStats->Header,
                              NDIS_OBJECT_TYPE_DEFAULT,
                              NDIS_OBJECT_REVISION_1,
                              sizeof(NDIS_STATISTICS_INFO));
      pStats->SupportedStatistics = XMP_NIC_GEN_STAT_FLAGS(pNic);

      pStats->ifInDiscards = stats->rmac_drop_frms + 
                             stats->rmac_discarded_frms;

      pStats->ifInErrors = stats->rmac_drop_frms;

      //pStats->ifHCInOctets = stats->rmac_ttl_octets;
      pStats->ifHCInOctets = (swStats->rxDirBytes + swStats->rxMcastBytes +
                              swStats->rxBcastBytes);

      //pStats->ifHCInUcastPkts = stats->rmac_vld_frms;
      pStats->ifHCInUcastPkts = swStats->rxDirFrames;

      //pStats->ifHCInMulticastPkts =  stats->rmac_vld_mcst_frms;
      pStats->ifHCInMulticastPkts =  swStats->rxMcastFrames;

	    //pStats->ifHCInBroadcastPkts =  stats->rmac_vld_bcst_frms;
	    pStats->ifHCInBroadcastPkts =  swStats->rxBcastFrames;

      //pStats->ifHCOutOctets = stats->tmac_ttl_octets;
      pStats->ifHCOutOctets = (swStats->txDirBytes + swStats->txMcastBytes +
                              swStats->txBcastBytes);

      //pStats->ifHCOutUcastPkts = stats->tmac_ucst_frms;
      pStats->ifHCOutUcastPkts = swStats->txDirFrames;

      // pStats->ifHCOutMulticastPkts = stats->tmac_mcst_frms;
      pStats->ifHCOutMulticastPkts = swStats->txMcastFrames;

      //pStats->ifHCOutBroadcastPkts = stats->tmac_bcst_frms;
      pStats->ifHCOutBroadcastPkts = swStats->txBcastFrames;

      //pStats->ifOutErrors = stats->tmac_any_err_frms;
      pStats->ifOutErrors = swStats->txErrFrames;

      pStats->ifOutDiscards          = 0;
      pStats->ifHCInUcastOctets      = swStats->rxDirBytes;
      pStats->ifHCInMulticastOctets  = swStats->rxMcastBytes;
      pStats->ifHCInBroadcastOctets  = swStats->rxBcastBytes;
      pStats->ifHCOutUcastOctets     = swStats->txDirBytes;
      pStats->ifHCOutMulticastOctets = swStats->txMcastBytes;
      pStats->ifHCOutBroadcastOctets = swStats->txBcastBytes;
    }
    break;

  default:
    Status = NDIS_STATUS_NOT_SUPPORTED;
    break;
  }
  //DBGPRINT ( ( "<== MpGetStatsCounters\n" ) );
  return ( Status );
}