/* @func ret_t | rtl8367b_getAsicLedSerialModeConfig | Get LED serial mode setup @parm rtk_uint32*| active | Active High or Low. @rvalue RT_ERR_OK | Success. @rvalue RT_ERR_SMI | SMI access error. @rvalue RT_ERR_INPUT | Invalid input value. @comm The API can get LED serial mode setup and get signal active high/low. */ ret_t rtl8367b_getAsicLedSerialModeConfig(rtk_uint32 *active, rtk_uint32 *serimode) { ret_t retVal; if((retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_LED_SYS_CONFIG, RTL8367B_SERI_LED_ACT_LOW_OFFSET, active))!= RT_ERR_OK) return retVal; /*get to 8G mode (not 16G mode)*/ if((retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_LED_MODE, RTL8367B_DLINK_TIME_OFFSET, serimode))!= RT_ERR_OK) return retVal; return RT_ERR_OK; }
/* Function Name: * rtl8367b_getAsicPortBlockSpa * Description: * Get disabling blocking frame if source port and destination port are the same * Input: * port - Physical port number (0~7) * pPermit - 0: block; 1: permit * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicPortBlockSpa(rtk_uint32 port, rtk_uint32* pPermit) { if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_SOURCE_PORT_BLOCK_REG, port, pPermit); }
/* Function Name: * rtl8367b_getAsicGreenHighPriorityTraffic * Description: * Get indicator which ASIC had received high priority traffic or not * Input: * port - Physical port number (0~7) * pIndicator - Have received high priority traffic indicator. If 1 means ASCI had received high priority in 1second checking priod * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicGreenHighPriorityTraffic(rtk_uint32 port, rtk_uint32* pIndicator) { if(port > RTL8367B_PORTIDMAX) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_REG_HIGHPRI_INDICATOR, port, pIndicator); }
/* Function Name: * rtl8367b_getAsicIgmp * Description: * Get IGMP/MLD state * Input: * enabled - 1: enabled, 0: disabled * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicIgmp(rtk_uint32 *ptr_enabled) { ret_t retVal; retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_IGMP_MLD_CFG0, RTL8367B_IGMP_MLD_EN_OFFSET, ptr_enabled); return retVal; }
/* Function Name: * rtl8367b_getAsicPortBasedFidEn * Description: * Get port based FID selection enable * Input: * port - Physical port number (0~7) * pEnabled - 1: enabled, 0: disabled * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicPortBasedFidEn(rtk_uint32 port, rtk_uint32* pEnabled) { if(port > RTL8367B_PORTIDMAX) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_REG_PORT_PBFIDEN,port, pEnabled); }
/* Function Name: * rtl8367b_getAsicGreenTrafficType * Description: * Get traffic type for each priority * Input: * priority - internal priority (0~7) * pTraffictype - high/low traffic type, 1:high priority traffic type, 0:low priority traffic type * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_QOS_INT_PRIORITY - Invalid priority * Note: * None */ ret_t rtl8367b_getAsicGreenTrafficType(rtk_uint32 priority, rtk_uint32* pTraffictype) { if(priority > RTL8367B_PRIMAX) return RT_ERR_QOS_INT_PRIORITY; return rtl8367b_getAsicRegBit(RTL8367B_REG_HIGHPRI_CFG, priority, pTraffictype); }
/* Function Name: * rtl8367b_getAsicGpioAclEnClear * Description: * Get gpio output * Input: * gpioPin - GPIO pin number * pGpioEn - GPIO enabled * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_OUT_OF_RANGE - input out of range. * Note: * None */ ret_t rtl8367b_getAsicGpioAclEnClear(rtk_uint32 gpioPin, rtk_uint32* pGpioEn) { if(gpioPin >= RTL8367B_GPIOPINNO) return RT_ERR_OUT_OF_RANGE; return rtl8367b_getAsicRegBit(RTL8367B_REG_ACL_GPIO, gpioPin, pGpioEn); }
/* Function Name: * rtl8367b_getAsicEeepTxEnable * Description: * Get per-port EEEP Tx function enable/disable * Input: * port - Physical port number (0~7) * pEnabled - 1: enabled, 0: disabled * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicEeepTxEnable(rtk_uint32 port, rtk_uint32 *pEnabled) { if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_EEEP_CFG_REG(port), RTL8367B_PORT0_EEECFG_EEEP_ENABLE_TX_OFFSET, pEnabled); }
/* Function Name: * rtl8367b_getAsicPortLoopback * Description: * Set MAC loopback * Input: * port - Physical port number (0~7) * Output: * pEnable - 0: Disable, 1: enable * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicPortLoopback(rtk_uint32 port, rtk_uint32 *pEnable) { if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_PORT_MISC_CFG_REG(port), RTL8367B_PORT0_MISC_CFG_MAC_LOOPBACK_OFFSET, pEnable); }
/* Function Name: * rtl8367b_getAsicMIBsLoggingType * Description: * MIB logging counter type * Input: * index - logging counter mode index (0~15) * pType - 0:Packet count 1:Byte count * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_OUT_OF_RANGE - input parameter out of range * Note: * None */ ret_t rtl8367b_getAsicMIBsLoggingType(rtk_uint32 index, rtk_uint32* pType) { if(index > RTL8367B_MIB_MAX_LOG_MODE_IDX) return RT_ERR_OUT_OF_RANGE; return rtl8367b_getAsicRegBit(RTL8367B_REG_MIB_CTRL5, index,pType); }
/* Function Name: * rtl8367b_getAsic1xPBOpdirConfig * Description: * Get 802.1x port-based operational direction * Input: * port - Physical port number (0~7) * pOpdir - Operation direction 1: IN, 0:BOTH * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsic1xPBOpdirConfig(rtk_uint32 port, rtk_uint32* pOpdir) { if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_DOT1X_PORT_OPDIR_REG, port, pOpdir); }
/* Function Name: * rtl8367b_getAsicPortSmallIpg * Description: * Get small ipg egress mode * Input: * port - Physical port number (0~7) * pEnable - 0: normal, 1: small * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicPortSmallIpg(rtk_uint32 port, rtk_uint32* pEnable) { if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_PORT_SMALL_IPG_REG(port), RTL8367B_PORT0_MISC_CFG_SMALL_TAG_IPG_OFFSET, pEnable); }
/* @func ret_t | rtl8367b_getAsicEeeGiga | Get 100M eee enable/disable. @parm rtk_uint32 | port | The port number. @parm rtk_uint32* | enabled | 1: enabled, 0: disabled. @rvalue RT_ERR_OK | Success. @rvalue RT_ERR_SMI | SMI access error. @rvalue RT_ERR_INPUT | Invalid input parameter. @comm This API get the 100M EEE function. */ ret_t rtl8367b_getAsicEeeGiga(rtk_uint32 port, rtk_uint32 *enable) { if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_PORT_EEE_CFG_REG(port), RTL8367B_PORT_EEE_GIGA_OFFSET, enable); }
/* Function Name: * rtl8367b_getAsicPortDos * Description: * Get DOS function * Input: * type - DOS type * pDrop - 0: permit; 1: drop * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_OUT_OF_RANGE - Invalid payload index * Note: * None */ ret_t rtl8367b_getAsicPortDos(rtk_uint32 type, rtk_uint32* pDrop) { if(type >= DOS_END) return RT_ERR_OUT_OF_RANGE; return rtl8367b_getAsicRegBit(RTL8367B_REG_DOS_CFG, RTL8367B_DROP_DAEQSA_OFFSET + type,pDrop); }
/* Function Name: * rtl8367b_getAsicGpioOutput * Description: * Get gpio output * Input: * gpioPin - GPIO pin number * pGpioOutput - GPIO output * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_OUT_OF_RANGE - input out of range. * Note: * None */ ret_t rtl8367b_getAsicGpioOutput(rtk_uint32 gpioPin, rtk_uint32* pGpioOutput) { if(gpioPin >= RTL8367B_GPIOPINNO) return RT_ERR_OUT_OF_RANGE; return rtl8367b_getAsicRegBit(RTL8367B_REG_CTRL_GPIO, gpioPin, pGpioOutput); }
/* Function Name: * rtl8367b_getAsic1xPBAuthConfig * Description: * Get 802.1x port-based authorised port configuration * Input: * port - Physical port number (0~7) * pAuth - 1: authorised, 0: non-authorised * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsic1xPBAuthConfig(rtk_uint32 port, rtk_uint32 *pAuth) { if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_DOT1X_PORT_AUTH_REG, port, pAuth); }
/* Function Name: * rtl8367b_getAsic1xPBEnConfig * Description: * Get 802.1x port-based port enable configuration * Input: * port - Physical port number (0~7) * pEnabled - 1: enabled, 0: disabled * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsic1xPBEnConfig(rtk_uint32 port, rtk_uint32 *pEnabled) { if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367B_DOT1X_PORT_ENABLE_REG, port, pEnabled); }
/* Function Name: * rtl8367b_getAsicVlanIngressFilter * Description: * Get VLAN Ingress Filter * Input: * port - Physical port number (0~7) * pEnable - Enable or disable Ingress filter * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicVlanIngressFilter(rtk_uint32 port, rtk_uint32 *pEnable) { if(port > RTL8367B_PORTIDMAX) return RT_ERR_PORT_ID; return rtl8367b_getAsicRegBit(RTL8367BG_VLAN_INGRESS_REG, port, pEnable); }
/* Function Name: * rtl8367b_getAsicFlowControlQueueEgressEnable * Description: * Get flow control ability for each queue * Input: * port - Physical port number (0~7) * qid - Queue id * pEnabled - 1: enabled, 0: disabled * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * RT_ERR_QUEUE_ID - Invalid queue id * Note: * None */ ret_t rtl8367b_getAsicFlowControlQueueEgressEnable(rtk_uint32 port, rtk_uint32 qid, rtk_uint32* pEnabled) { if(port > RTL8367B_PORTIDMAX) return RT_ERR_PORT_ID; if(qid > RTL8367B_QIDMAX) return RT_ERR_QUEUE_ID; return rtl8367b_getAsicRegBit(RTL8367B_FLOWCRTL_EGRESS_QUEUE_ENABLE_REG(port), RTL8367B_FLOWCRTL_EGRESS_QUEUE_ENABLE_REG_OFFSET(port)+ qid, pEnabled); }
/* Function Name: * rtl8367b_getAsicIpMulticastVlanLeaky * Description: * Get IP multicast VLAN Leaky function * Input: * port - Physical port number (0~7) * enabled - 1: enabled, 0: disabled * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicIpMulticastVlanLeaky(rtk_uint32 port, rtk_uint32 *ptr_enabled) { ret_t retVal; if(port > RTL8367B_PORTIDMAX) return RT_ERR_PORT_ID; retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_IPMCAST_VLAN_LEAKY, port, ptr_enabled); return retVal; }
/* Function Name: * rtl8367b_getAsicLutCamTbUsage * Description: * Get Lut CAM table usage * Input: * pEnabled - L2 CAM table usage 1: enabled, 0: disabled * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicLutCamTbUsage(rtk_uint32* pEnabled) { ret_t retVal; rtk_uint32 regData; if ((retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_LUT_CFG, RTL8367B_BCAM_DISABLE_OFFSET, ®Data)) != RT_ERR_OK) return retVal; *pEnabled = regData ? 0 : 1; return RT_ERR_OK; }
/* Function Name: * rtl8367b_getAsicIGMPDropLeaveZero * Description: * Get the function of droppping Leave packet with group IP = 0.0.0.0 * Input: * None * Output: * pDrop - 1: Drop, 0:Bypass * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicIGMPDropLeaveZero(rtk_uint32 *pDrop) { ret_t retVal; rtk_uint32 regData; retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_IGMP_MLD_CFG1, RTL8367B_DROP_LEAVE_ZERO_OFFSET, ®Data); if(retVal != RT_ERR_OK) return retVal; *pDrop = regData; return RT_ERR_OK; }
/* Function Name: * rtl8367b_getAsicIGMPVLANLeaky * Description: * Get VLAN leaky for IGMP/MLD packet * Input: * Noen * Output: * pLeaky - 1: Leaky, 0:not leaky * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicIGMPVLANLeaky(rtk_uint32 *pLeaky) { ret_t retVal; rtk_uint32 regData; retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_IGMP_MLD_CFG0, RTL8367B_IGMP_MLD_VLAN_LEAKY_OFFSET, ®Data); if(retVal != RT_ERR_OK) return retVal; *pLeaky = regData; return RT_ERR_OK; }
/* Function Name: * rtl8367b_getAsicIGMPReportFlood * Description: * Get IGMPv1/v2 MLD v1 Report flood * Input: * None * Output: * pflood - 1: flooding to all port, 0: forward to router ports only * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicIGMPReportFlood(rtk_uint32 *pFlood) { ret_t retVal; rtk_uint32 regData; retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_IGMP_MLD_CFG0, RTL8367B_REPORT_FORWARD_OFFSET, ®Data); if(retVal != RT_ERR_OK) return retVal; *pFlood = regData; return RT_ERR_OK; }
/* Function Name: * rtl8367b_getAsicIGMPBypassStormCTRL * Description: * Set the function of bypass strom control for IGMP/MLD packet * Input: * None * Output: * pBypass - 1: Bypass, 0:not bypass * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicIGMPBypassStormCTRL(rtk_uint32 *pBypass) { ret_t retVal; rtk_uint32 regData; retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_IGMP_MLD_CFG0, RTL8367B_IGMP_MLD_DISCARD_STORM_FILTER_OFFSET, ®Data); if(retVal != RT_ERR_OK) return retVal; *pBypass = regData; return RT_ERR_OK; }
/* Function Name: * rtl8367b_getAsicLedGroupMode * Description: * Get Led Group mode * Input: * pMode - LED mode * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicLedGroupMode(rtk_uint32* pMode) { ret_t retVal; rtk_uint32 regData; retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_LED_CONFIGURATION, RTL8367B_LED_CONFIG_SEL_OFFSET, ®Data); if(retVal != RT_ERR_OK) return retVal; if(regData!=1) return RT_ERR_FAILED; return rtl8367b_getAsicRegBits(RTL8367B_REG_LED_CONFIGURATION, RTL8367B_DATA_LED_MASK, pMode); }
/* Function Name: * rtl8367b_getAsicPortIngressBandwidth * Description: * Get per-port total ingress bandwidth * Input: * port - Physical port number (0~7) * pBandwidth - The total ingress bandwidth (unit: 8Kbps), 0x1FFFF:disable * pPreifg - Include preamble and IFG, 0:Exclude, 1:Include * pEnableFC - Action when input rate exceeds. 0: Drop 1: Flow Control * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367b_getAsicPortIngressBandwidth(rtk_uint32 port, rtk_uint32* pBandwidth, rtk_uint32* pPreifg, rtk_uint32* pEnableFC) { ret_t retVal; rtk_uint32 regData; rtk_uint32 regAddr; /* Invalid input parameter */ if(port >= RTL8367B_PORTNO) return RT_ERR_PORT_ID; regAddr = RTL8367B_INGRESSBW_PORT_RATE_LSB_REG(port); retVal = rtl8367b_getAsicReg(regAddr, ®Data); if(retVal != RT_ERR_OK) return retVal; *pBandwidth = regData; regAddr += 1; retVal = rtl8367b_getAsicRegBit(regAddr, 0, ®Data); if(retVal != RT_ERR_OK) return retVal; *pBandwidth |= (regData << RTL8367B_QOS_GRANULARTY_MSB_OFFSET); regAddr = RTL8367B_PORT_MISC_CFG_REG(port); retVal = rtl8367b_getAsicRegBit(regAddr, RTL8367B_PORT0_MISC_CFG_INGRESSBW_IFG_OFFSET, pPreifg); if(retVal != RT_ERR_OK) return retVal; regAddr = RTL8367B_PORT_MISC_CFG_REG(port); retVal = rtl8367b_getAsicRegBit(regAddr, RTL8367B_PORT0_MISC_CFG_INGRESSBW_FLOWCTRL_OFFSET, pEnableFC); if(retVal != RT_ERR_OK) return retVal; return RT_ERR_OK; }
/* Function Name: * rtl8367B_getAsicPortEnableAll * Description: * Set ALL ports enable. * Input: * enable - enable all ports. * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicPortEnableAll(rtk_uint32 *pEnable) { ret_t retVal; rtk_uint32 regData; retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_PHY_AD, RTL8367B_PDNPHY_OFFSET, ®Data); if(retVal != RT_ERR_OK) return retVal; if (regData==0) *pEnable = 1; else *pEnable = 0; return RT_ERR_OK; }
/* @func ret_t | rtl8367b_getAsicLedOperationMode | Get LED OP mode setup @parm rtk_uint32*| mode | LED mode. 1:scan mode 1, 2:parallel mode, 3:mdx mode (serial mode) @rvalue RT_ERR_OK | Success. @rvalue RT_ERR_SMI | SMI access error. @rvalue RT_ERR_INPUT | Invalid input value. @comm The API can get LED serial mode setup and get signal active high/low. */ ret_t rtl8367b_getAsicLedOperationMode(rtk_uint32 *mode) { ret_t retVal; rtk_uint32 regData; if((retVal = rtl8367b_getAsicRegBit(RTL8367B_REG_LED_SYS_CONFIG, RTL8367B_LED_SELECT_OFFSET, ®Data))!= RT_ERR_OK) return retVal; if (regData == 1) *mode = LEDOP_SERIAL; else if (regData == 0) *mode = LEDOP_PARALLEL; else return RT_ERR_FAILED; return RT_ERR_OK; }
/* Function Name: * rtl8367b_getAsicFlowControlJumboMode * Description: * Get Jumbo threhsold for flow control * Input: * pEnabled - Jumbo mode flow control 1: Enable 0:Disable * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * Note: * None */ ret_t rtl8367b_getAsicFlowControlJumboMode(rtk_uint32* pEnabled) { return rtl8367b_getAsicRegBit(RTL8367B_REG_FLOWCTRL_JUMBO_SIZE, RTL8367B_JUMBO_MODE_OFFSET, pEnabled); }