/******************************************************************************* * gprtClearAllCtr * * DESCRIPTION: * This routine clears all port rx/tx counters. * * INPUTS: * None. * * OUTPUTS: * None. * * RETURNS: * GT_OK - on success * GT_FAIL - on error * * COMMENTS: * * * GalTis: * *******************************************************************************/ GT_STATUS gprtClearAllCtr ( IN GT_QD_DEV *dev ) { IN GT_STATUS retVal; /* Functions return value. */ IN GT_U16 mode; /* hold counters current mode */ DBG_INFO(("gprtClearAllCtr Called.\n")); if (IS_IN_DEV_GROUP(dev,DEV_88E6093_FAMILY)) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } /* get counter current mode */ if(hwGetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL,8,1,&mode) != GT_OK) { DBG_INFO(("Failed (Get field).\n")); return GT_FAIL; } /* write opposite value to reset counter */ if(hwSetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL,8,1,(GT_U16)(1 - mode)) != GT_OK) { DBG_INFO(("Failed (Get field).\n")); return GT_FAIL; } /* restore counters mode */ retVal = hwSetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL,8,1,mode); DBG_INFO(("OK.\n")); return retVal; }
/******************************************************************************* * gprtSetCtrMode * * DESCRIPTION: * This routine sets the port rx/tx counters mode of operation. * * INPUTS: * mode - the counter mode. * * OUTPUTS: * None. * * RETURNS: * GT_OK - on success * GT_FAIL - on error * * COMMENTS: * * * GalTis: * *******************************************************************************/ GT_STATUS gprtSetCtrMode ( IN GT_QD_DEV *dev, IN GT_CTR_MODE mode ) { GT_STATUS retVal; /* Functions return value. */ DBG_INFO(("gprtSetCtrMode Called.\n")); if (IS_IN_DEV_GROUP(dev,DEV_88E6093_FAMILY)) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } retVal = hwSetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL,8,1,(GT_U16)mode); if(retVal != GT_OK) { DBG_INFO(("gprtSetCtrMode Failed .\n")); return GT_FAIL; } DBG_INFO(("gprtSetCtrMode OK .\n")); return retVal; }
/******************************************************************************* * gstatsSetHistogramMode * * DESCRIPTION: * This routine sets the Histogram Counters Mode. * * INPUTS: * mode - Histogram Mode (GT_COUNT_RX_ONLY, GT_COUNT_TX_ONLY, * and GT_COUNT_RX_TX) * * OUTPUTS: * None. * * RETURNS: * GT_OK - on success * GT_BAD_PARAM - on bad parameter * GT_FAIL - on error * GT_NOT_SUPPORTED - if current device does not support this feature. * * COMMENTS: * *******************************************************************************/ GT_STATUS gstatsSetHistogramMode ( IN GT_QD_DEV *dev, IN GT_HISTOGRAM_MODE mode ) { GT_STATUS retVal; /* Functions return value. */ GT_U16 data; /* The register's read data. */ DBG_INFO(("gstatsSetHistogramMode Called.\n")); /* Only Gigabit Switch supports this status. */ if (!((IS_IN_DEV_GROUP(dev,DEV_GIGABIT_MANAGED_SWITCH)) || (IS_IN_DEV_GROUP(dev,DEV_RMON_REALTIME_SUPPORT)))) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } switch (mode) { case GT_COUNT_RX_ONLY: case GT_COUNT_TX_ONLY: case GT_COUNT_RX_TX: break; default: DBG_INFO(("Failed.\n")); return GT_BAD_PARAM; } data = (GT_U16)mode + 1; /* Set the Histogram mode bit. */ if (IS_IN_DEV_GROUP(dev,DEV_88E6999_FAMILY) || IS_IN_DEV_GROUP(dev,DEV_88E6390_FAMILY)) retVal = hwSetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL2,6,2,data); else retVal = hwSetGlobalRegField(dev,QD_REG_STATS_OPERATION,10,2,data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); return retVal; } DBG_INFO(("OK.\n")); return GT_OK; }
/******************************************************************************* * eventSetActive * * DESCRIPTION: * This routine enables/disables the receive of an hardware driven event. * * INPUTS: * eventType - the event type. any combination of the folowing: * GT_STATS_DONE, GT_VTU_PROB, GT_VTU_DONE, GT_ATU_FULL(or GT_ATU_PROB), * GT_ATU_DONE, GT_PHY_INTERRUPT, GT_EE_INTERRUPT, GT_DEVICE_INT, * and GT_AVB_INTERRUPT * * OUTPUTS: * None. * * RETURNS: * GT_OK - on success * GT_FAIL - on error * * COMMENTS: * Each switch device has its own set of event Types. Please refer to the * device datasheet for the list of event types that the device supports. * *******************************************************************************/ GT_STATUS eventSetActive ( IN GT_QD_DEV *dev, IN GT_U32 eventType ) { GT_STATUS retVal; GT_U16 data; GT_U16 intMask; GT_U8 len; DBG_INFO(("eventSetActive Called.\n")); data = (GT_U16) eventType; len = 9; if ((IS_IN_DEV_GROUP(dev,DEV_EXTERNAL_PHY_ONLY)) || (IS_IN_DEV_GROUP(dev,DEV_DEV_PHY_INTERRUPT))) { intMask = GT_NO_INTERNAL_PHY_INT_MASK; } else { intMask = GT_INT_MASK; } if (!IS_IN_DEV_GROUP(dev,DEV_AVB_INTERRUPT)) { intMask &= ~GT_AVB_INT; len = 8; } if (!IS_IN_DEV_GROUP(dev,DEV_DEVICE_INTERRUPT)) { intMask &= ~GT_DEVICE_INT; len = 7; } if(data & ~intMask) { DBG_INFO(("Invalid event type.\n")); return GT_FAIL; } /* Set the IntEn bit. */ retVal = hwSetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL,0,len,data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); return retVal; } DBG_INFO(("OK.\n")); return GT_OK; }