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)); } }
/* * 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 ); }