/* Function Name: * rtl8367c_setAsicPortMirror * Description: * Set port mirror function * Input: * source - Source port * monitor - Monitor (destination) port * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * Note: * None */ ret_t rtl8367c_setAsicPortMirror(rtk_uint32 source, rtk_uint32 monitor) { ret_t retVal; if((source > RTL8367C_PORTIDMAX) || (monitor > RTL8367C_PORTIDMAX)) return RT_ERR_PORT_ID; retVal = rtl8367c_setAsicRegBits(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_SOURCE_PORT_MASK, source); if(retVal != RT_ERR_OK) return retVal; return rtl8367c_setAsicRegBits(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_MONITOR_PORT_MASK, monitor); }
/* Function Name: * rtl8367c_setAsicLutLearnOverAct * Description: * Set auto learn over limit number action * Input: * action - Learn over action 0:normal, 1:drop 2:trap * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_NOT_ALLOWED - Invalid learn over action * Note: * None */ ret_t rtl8367c_setAsicLutLearnOverAct(rtk_uint32 action) { if(action >= LRNOVERACT_END) return RT_ERR_NOT_ALLOWED; return rtl8367c_setAsicRegBits(RTL8367C_REG_PORT_SECURITY_CTRL, RTL8367C_LUT_LEARN_OVER_ACT_MASK, action); }
/* Function Name: * rtl8367c_setAsicPortMirrorMask * Description: * Set mirror source port mask * Input: * SourcePortmask - Source Portmask * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_MASK- Port Mask Error * Note: * None */ ret_t rtl8367c_setAsicPortMirrorMask(rtk_uint32 SourcePortmask) { if( SourcePortmask > RTL8367C_PORTMASK) return RT_ERR_PORT_MASK; return rtl8367c_setAsicRegBits(RTL8367C_REG_MIRROR_SRC_PMSK, RTL8367C_MIRROR_SRC_PMSK_MASK, SourcePortmask); }
/* Function Name: * rtl8367c_setAsicSystemLutLearnOverAct * Description: * Set system auto learn over limit number action * Input: * action - Learn over action 0:normal, 1:drop, 2:trap * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_NOT_ALLOWED - Invalid learn over action * Note: * None */ ret_t rtl8367c_setAsicSystemLutLearnOverAct(rtk_uint32 action) { if(action >= LRNOVERACT_END) return RT_ERR_NOT_ALLOWED; return rtl8367c_setAsicRegBits(RTL8367C_REG_LUT_LRN_SYS_LMT_CTRL, RTL8367C_LUT_SYSTEM_LEARN_OVER_ACT_MASK, action); }
/* Function Name: * rtl8367c_setAsicOamCpuPri * Description: * Set trap priority for OAM packet * Input: * priority - priority (0~7) * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_QOS_INT_PRIORITY - Invalid priority * Note: * None */ ret_t rtl8367c_setAsicOamCpuPri(rtk_uint32 priority) { if(priority > RTL8367C_PRIMAX) return RT_ERR_QOS_INT_PRIORITY; return rtl8367c_setAsicRegBits(RTL8367C_REG_QOS_TRAP_PRIORITY0, RTL8367C_OAM_PRIOIRTY_MASK, priority); }
/* Function Name: * rtl8367c_setAsicRmaLldp * Description: * Set LLDP for CPU trapping * Input: * pRmacfg - type of RMA for trapping frame type setting * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_RMA_ADDR - Invalid RMA address index * Note: * None */ ret_t rtl8367c_setAsicRmaLldp(rtk_uint32 enabled, rtl8367c_rma_t* pRmacfg) { rtk_uint32 regData; ret_t retVal; if(enabled > 1) return RT_ERR_ENABLE; if(pRmacfg->operation >= RMAOP_END) return RT_ERR_RMA_ACTION; if(pRmacfg->trap_priority > RTL8367C_PRIMAX) return RT_ERR_QOS_INT_PRIORITY; retVal = rtl8367c_setAsicRegBit(RTL8367C_REG_RMA_LLDP_EN, RTL8367C_RMA_LLDP_EN_OFFSET,enabled); if(retVal != RT_ERR_OK) return retVal; regData = *(rtk_uint16*)pRmacfg; retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, pRmacfg->trap_priority); if(retVal != RT_ERR_OK) return retVal; return rtl8367c_setAsicReg(RTL8367C_REG_RMA_CTRL_LLDP, regData); }
/* Function Name: * rtl8367c_setAsicSvlanTrapPriority * Description: * Set trap to CPU priority assignment * Input: * priority - Priority assignment * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_QOS_INT_PRIORITY - Invalid priority * Note: * None */ ret_t rtl8367c_setAsicSvlanTrapPriority(rtk_uint32 priority) { if(priority > RTL8367C_PRIMAX) return RT_ERR_QOS_INT_PRIORITY; return rtl8367c_setAsicRegBits(RTL8367C_REG_QOS_TRAP_PRIORITY0, RTL8367C_SVLAN_PRIOIRTY_MASK, priority); }
/* Function Name: * rtl8367c_setAsicSvlanPrioritySel * Description: * Set SVLAN priority field setting * Input: * priSel - S-priority assignment method, 0:internal priority 1:C-tag priority 2:using Svlan member configuration * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input parameter * Note: * None */ ret_t rtl8367c_setAsicSvlanPrioritySel(rtk_uint32 priSel) { if(priSel >= SPRISEL_END) return RT_ERR_QOS_INT_PRIORITY; return rtl8367c_setAsicRegBits(RTL8367C_REG_SVLAN_CFG, RTL8367C_VS_SPRISEL_MASK, priSel); }
/* Function Name: * rtl8367c_setAsicLutAgeTimerSpeed * Description: * Set LUT agging out speed * Input: * timer - Agging out timer 0:Has been aged out * speed - Agging out speed 0-fastest 3-slowest * 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 rtl8367c_setAsicLutAgeTimerSpeed(rtk_uint32 timer, rtk_uint32 speed) { if(timer>RTL8367C_LUT_AGETIMERMAX) return RT_ERR_OUT_OF_RANGE; if(speed >RTL8367C_LUT_AGESPEEDMAX) return RT_ERR_OUT_OF_RANGE; return rtl8367c_setAsicRegBits(RTL8367C_REG_LUT_CFG, RTL8367C_AGE_TIMER_MASK | RTL8367C_AGE_SPEED_MASK, (timer << RTL8367C_AGE_TIMER_OFFSET) | (speed << RTL8367C_AGE_SPEED_OFFSET)); }
/* Function Name: * rtl8367c_setAsicOamMultiplexer * Description: * Set OAM multiplexer state * Input: * port - Physical port number (0~7) * multiplexer - Per-Port OAM multiplexer state * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * RT_ERR_NOT_ALLOWED - Invalid multiplexer state * Note: * None */ ret_t rtl8367c_setAsicOamMultiplexer(rtk_uint32 port, rtk_uint32 multiplexer) { if(port >= RTL8367C_PORTNO) return RT_ERR_PORT_ID; if(multiplexer > OAM_MULCPU) return RT_ERR_NOT_ALLOWED; return rtl8367c_setAsicRegBits(RTL8367C_REG_OAM_MULTIPLEXER_CTRL0 + port/8, RTL8367C_OAM_MULTIPLEXER_MASK(port%8), multiplexer); }
/* Function Name: * rtl8367c_setAsicOamParser * Description: * Set OAM parser state * Input: * port - Physical port number (0~7) * parser - Per-Port OAM parser state * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_PORT_ID - Invalid port number * RT_ERR_NOT_ALLOWED - Invalid paser state * Note: * None */ ret_t rtl8367c_setAsicOamParser(rtk_uint32 port, rtk_uint32 parser) { if(port >= RTL8367C_PORTNO) return RT_ERR_PORT_ID; if(parser > OAM_PARFWDCPU) return RT_ERR_NOT_ALLOWED; return rtl8367c_setAsicRegBits(RTL8367C_REG_OAM_PARSER_CTRL0 + port/8, RTL8367C_OAM_PARSER_MASK(port % 8), parser); }
/*ÐÞ¸Ä: RTL8367C_LUT_SYSTEM_LEARN_PMASK_MASK*/ ret_t rtl8367c_setAsicSystemLutLearnPortMask(rtk_uint32 portmask) { ret_t retVal; if(portmask > RTL8367C_PORTMASK) return RT_ERR_PORT_MASK; retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_LUT_LRN_SYS_LMT_CTRL, RTL8367C_LUT_SYSTEM_LEARN_PMASK_MASK, portmask & 0xff); if(retVal != RT_ERR_OK) return retVal; retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_LUT_LRN_SYS_LMT_CTRL, RTL8367C_LUT_SYSTEM_LEARN_PMASK1_MASK, (portmask>>8) & 0x7); if(retVal != RT_ERR_OK) return retVal; return RT_ERR_OK; }
/* Function Name: * rtl8367c_setAsicRmaCsstp * Description: * Set CSSTP(Cisco Shared Spanning Tree Protocol) for CPU trapping * Input: * pRmacfg - type of RMA for trapping frame type setting * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_RMA_ADDR - Invalid RMA address index * Note: * None */ ret_t rtl8367c_setAsicRmaCsstp(rtl8367c_rma_t* pRmacfg) { rtk_uint32 regData; ret_t retVal; if(pRmacfg->operation >= RMAOP_END) return RT_ERR_RMA_ACTION; if(pRmacfg->trap_priority > RTL8367C_PRIMAX) return RT_ERR_QOS_INT_PRIORITY; regData = *(rtk_uint16*)pRmacfg; retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, pRmacfg->trap_priority); if(retVal != RT_ERR_OK) return retVal; return rtl8367c_setAsicReg(RTL8367C_REG_RMA_CTRL_CSSTP, regData); }
/* Function Name: * rtl8367c_setAsicRma * Description: * Set reserved multicast address for CPU trapping * Input: * index - reserved multicast LSB byte, 0x00~0x2F is available value * pRmacfg - type of RMA for trapping frame type setting * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_SMI - SMI access error * RT_ERR_RMA_ADDR - Invalid RMA address index * Note: * None */ ret_t rtl8367c_setAsicRma(rtk_uint32 index, rtl8367c_rma_t* pRmacfg) { rtk_uint32 regData; ret_t retVal; if(index > RTL8367C_RMAMAX) return RT_ERR_RMA_ADDR; regData = *(rtk_uint16*)pRmacfg; if( (index >= 0x4 && index <= 0x7) || (index >= 0x9 && index <= 0x0C) || (0x0F == index)) index = 0x04; else if((index >= 0x13 && index <= 0x17) || (0x19 == index) || (index >= 0x1B && index <= 0x1f)) index = 0x13; else if(index >= 0x22 && index <= 0x2F) index = 0x22; retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, pRmacfg->trap_priority); if(retVal != RT_ERR_OK) return retVal; return rtl8367c_setAsicReg(RTL8367C_REG_RMA_CTRL00+index, regData); }