/******************************************************************************* * gpavSetIngressMonitor * * DESCRIPTION: * This routine sets the Ingress Monitor bit in the PAV. * * INPUTS: * port - the logical port number. * mode - the ingress monitor bit in the PAV * GT_FALSE: Ingress Monitor enabled * GT_TRUE: Ingress Monitor disabled * OUTPUTS: * None. * * RETURNS: * GT_OK - on success * GT_FAIL - on error * * COMMENTS: * * * GalTis: * *******************************************************************************/ GT_STATUS gpavSetIngressMonitor ( IN GT_QD_DEV *dev, IN GT_LPORT port, IN GT_BOOL mode ) { GT_STATUS retVal; /* Functions return value. */ GT_U16 data; /* Data to be set into the */ /* register. */ GT_U8 phyPort; /* Physical port. */ DBG_INFO(("gpavSetIngressMonitorCalled.\n")); phyPort = GT_LPORT_2_PORT(port); BOOL_2_BIT(mode,data); /* check if device supports this feature */ if (!IS_IN_DEV_GROUP(dev,DEV_ENABLE_MONITORING)) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } retVal = hwSetPortRegField(dev,phyPort,QD_REG_PORT_ASSOCIATION,15,1,data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); return retVal; } DBG_INFO(("OK.\n")); return GT_OK; }
/******************************************************************************* * gvlnSetPortUserPriLsb * * DESCRIPTION: * This routine Set the user priority (VPT) LSB bit, to be added to the * user priority on the egress. * * INPUTS: * port - logical port number to set. * userPriLsb - GT_TRUE for 1, GT_FALSE for 0. * * OUTPUTS: * None. * * RETURNS: * GT_OK - on success * GT_FAIL - on error * GT_BAD_PARAM - on bad parameters * * COMMENTS: * * GalTis: * *******************************************************************************/ GT_STATUS gvlnSetPortUserPriLsb ( IN GT_QD_DEV *dev, IN GT_LPORT port, IN GT_BOOL userPriLsb ) { GT_STATUS retVal; /* Functions return value. */ GT_U16 data; /* Data to be set into the */ /* register. */ GT_U8 phyPort; /* Physical port. */ DBG_INFO(("gvlnSetPortUserPriLsb Called.\n")); /* Gigabit Switch does not support this status. */ if ((IS_IN_DEV_GROUP(dev,DEV_GIGABIT_SWITCH)) || (IS_IN_DEV_GROUP(dev,DEV_ENHANCED_FE_SWITCH)) || (IS_IN_DEV_GROUP(dev,DEV_FE_AVB_FAMILY))) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } phyPort = GT_LPORT_2_PORT(port); BOOL_2_BIT(userPriLsb,data); retVal = hwSetPortRegField(dev,phyPort,QD_REG_PVID,13,1,data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); return retVal; } DBG_INFO(("OK.\n")); return GT_OK; }
/******************************************************************************* * gprtSetVlanTunnel * * DESCRIPTION: * This routine sets the vlan tunnel mode. * * INPUTS: * port - the logical port number. * mode - the vlan tunnel mode. * * OUTPUTS: * None. * * RETURNS: * GT_OK - on success * GT_FAIL - on error * * COMMENTS: * * * GalTis: * *******************************************************************************/ GT_STATUS gprtSetVlanTunnel ( IN GT_QD_DEV *dev, IN GT_LPORT port, IN GT_BOOL mode ) { GT_STATUS retVal; /* Functions return value. */ GT_U16 data; /* Data to be set into the */ /* register. */ GT_U8 phyPort; /* Physical port. */ DBG_INFO(("gprtSetVlanTunnel Called.\n")); phyPort = GT_LPORT_2_PORT(port); BOOL_2_BIT(mode,data); retVal = hwSetPortRegField(dev,phyPort,QD_REG_PORT_CONTROL,7,1,data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); return retVal; } DBG_INFO(("OK.\n")); return GT_OK; }
/******************************************************************************* * gpcsSetPCSAnEn * * DESCRIPTION: * This routine sets Enable mode of PCS Inband Auto-Negotiation. * * INPUTS: * port - the logical port number. * mode - GT_TRUE to enable PCS AN mode or GT_FALSE otherwise * * OUTPUTS: * None * * RETURNS: * GT_OK - on success * GT_FAIL - on error * GT_NOT_SUPPORTED - if current device does not support this feature. * * COMMENTS: * * GalTis: * *******************************************************************************/ GT_STATUS gpcsSetPCSAnEn ( IN GT_QD_DEV *dev, IN GT_LPORT port, IN GT_BOOL mode ) { GT_U16 data; /* Used to poll the SWReset bit */ GT_STATUS retVal; /* Functions return value. */ GT_U8 hwPort; /* the physical port number */ DBG_INFO(("gpcsSetPCSAnEn Called.\n")); /* check if the given Switch supports this feature. */ if (!IS_IN_DEV_GROUP(dev,DEV_PCS)) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } /* translate BOOL to binary */ BOOL_2_BIT(mode, data); /* translate LPORT to hardware port */ hwPort = GT_LPORT_2_PORT(port); /* check if the given port supports PCS */ if (!DOES_DEVPORT_SUPPORT_PCS(dev,hwPort)) { if (!IS_IN_DEV_GROUP(dev, DEV_INTERNAL_GPHY)) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } if ((hwPort < 4) || (hwPort > 7)) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } } /* Get the PCSAnEn bit. */ retVal = hwSetPortRegField(dev,hwPort, QD_REG_PCS_CONTROL,10,1,data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); } else { DBG_INFO(("OK.\n")); } /* return */ return retVal; }
GT_STATUS gprtSerdesPowerDown ( IN GT_QD_DEV *dev, IN GT_LPORT port, IN GT_BOOL state ) { GT_STATUS retVal; /* Functions return value. */ GT_U8 hwPort, serdesPort; /* the physical port number */ GT_U16 u16Data; GT_U8 pageNum = _getSerdesPageNumber(dev); GT_PHY_INFO serdesInfo; DBG_INFO(("gprtSerdesPowerDown Called.\n")); /* translate LPORT to hardware port */ hwPort = GT_LPORT_2_PHY(port); serdesPort = hwPort; GT_GET_SERDES_PORT(dev,&serdesPort); gtSemTake(dev,dev->phyRegsSem,OS_WAIT_FOREVER); /* check if the port is configurable */ if((serdesInfo.phyId=GT_GET_PHY_ID(dev,hwPort)) == GT_INVALID_PHY) { gtSemGive(dev,dev->phyRegsSem); return GT_NOT_SUPPORTED; } if(driverFindPhyInformation(dev,hwPort,&serdesInfo) != GT_OK) { DBG_INFO(("Unknown PHY device.\n")); gtSemGive(dev,dev->phyRegsSem); return GT_FAIL; } /* check if the port is configurable */ if(!IS_CONFIGURABLE_PHY(dev,hwPort)) { gtSemGive(dev,dev->phyRegsSem); return GT_NOT_SUPPORTED; } BOOL_2_BIT(state,u16Data); if((retVal=hwSetPagedPhyRegField(dev,serdesPort, pageNum,QD_SERDES_CONTROL_REG,11,1,serdesInfo.anyPage,u16Data)) != GT_OK) { DBG_INFO(("Failed.\n")); gtSemGive(dev,dev->phyRegsSem); return retVal; } gtSemGive(dev,dev->phyRegsSem); return GT_OK; }
/******************************************************************************* * gpcsSetForcedFC * * DESCRIPTION: * This routine forces Flow Control. If FCValue is set to one, calling this * routine with GT_TRUE will force Flow Control to be enabled. * * INPUTS: * port - the logical port number. * state - GT_TRUE to force flow control (enable or disable), GT_FALSE otherwise * * OUTPUTS: * None * * RETURNS: * GT_OK - on success * GT_FAIL - on error * GT_NOT_SUPPORTED - if current device does not support this feature. * * COMMENTS: * * GalTis: * *******************************************************************************/ GT_STATUS gpcsSetForcedFC ( IN GT_QD_DEV *dev, IN GT_LPORT port, IN GT_BOOL state ) { GT_U16 data; /* Used to poll the SWReset bit */ GT_STATUS retVal; /* Functions return value. */ GT_U8 hwPort; /* the physical port number */ DBG_INFO(("gpcsSetForcedFC Called.\n")); /* check if the given Switch supports this feature. */ if (!IS_IN_DEV_GROUP(dev,DEV_FC_WITH_VALUE)) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } BOOL_2_BIT(state, data); /* translate LPORT to hardware port */ hwPort = GT_LPORT_2_PORT(port); /* Get the ForcedFC bit. */ retVal = hwSetPortRegField(dev,hwPort, QD_REG_PCS_CONTROL,6,1,data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); } else { DBG_INFO(("OK.\n")); } /* return */ return retVal; }
/******************************************************************************* * geventSetAgeIntEn * * DESCRIPTION: * This routine enables/disables Age Interrupt for a port. * When it's enabled, ATU Age Violation interrupts from this port are enabled. * An Age Violation will occur anytime a port is Locked(gprtSetLockedPort) * and the ingressing frame's SA is contained in the ATU as a non-Static * entry with a EntryState less than 0x4. * * INPUTS: * port - the logical port number * mode - GT_TRUE to enable Age Interrupt, * GT_FALUSE to disable * * OUTPUTS: * None. * * RETURNS: * GT_OK - on success * GT_FAIL - on error * GT_NOT_SUPPORTED - if current device does not support this feature. * * COMMENTS: * *******************************************************************************/ GT_STATUS geventSetAgeIntEn ( IN GT_QD_DEV *dev, IN GT_LPORT port, IN GT_BOOL mode ) { GT_U16 data; GT_STATUS retVal; /* Functions return value. */ GT_U8 hwPort; /* the physical port number */ DBG_INFO(("geventSetAgeIntEn Called.\n")); /* translate LPORT to hardware port */ hwPort = GT_LPORT_2_PORT(port); if (!IS_IN_DEV_GROUP(dev,DEV_PORT_BASED_AGE_INT)) { DBG_INFO(("GT_NOT_SUPPORTED\n")); return GT_NOT_SUPPORTED; } /* translate BOOL to binary */ BOOL_2_BIT(mode, data); /* Set Age Interrupt Enable Mode. */ retVal = hwSetPortRegField(dev,hwPort, QD_REG_PORT_ASSOCIATION,11,1,data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); } else { DBG_INFO(("OK.\n")); } return retVal; }