1/* 2 * Copyright (C) 2013 Realtek Semiconductor Corp. 3 * All Rights Reserved. 4 * 5 * This program is the proprietary software of Realtek Semiconductor 6 * Corporation and/or its licensors, and only be used, duplicated, 7 * modified or distributed under the authorized license from Realtek. 8 * 9 * ANY USE OF THE SOFTWARE OTHER THAN AS AUTHORIZED UNDER 10 * THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. 11 * 12 * $Revision: 42321 $ 13 * $Date: 2013-08-26 13:51:29 +0800 (������, 26 ������ 2013) $ 14 * 15 * Purpose : RTL8367C switch high-level API for RTL8367C 16 * Feature : Unkown multicast related functions 17 * 18 */ 19#include <rtl8367c_asicdrv_unknownMulticast.h> 20/* Function Name: 21 * rtl8367c_setAsicUnknownL2MulticastBehavior 22 * Description: 23 * Set behavior of L2 multicast 24 * Input: 25 * port - Physical port number (0~7) 26 * behave - 0: flooding, 1: drop, 2: trap 27 * Output: 28 * None 29 * Return: 30 * RT_ERR_OK - Success 31 * RT_ERR_SMI - SMI access error 32 * RT_ERR_PORT_ID - Invalid port number 33 * RT_ERR_NOT_ALLOWED - Invalid operation 34 * Note: 35 * None 36 */ 37ret_t rtl8367c_setAsicUnknownL2MulticastBehavior(rtk_uint32 port, rtk_uint32 behave) 38{ 39 ret_t retVal; 40 41 if(port > RTL8367C_PORTIDMAX) 42 return RT_ERR_PORT_ID; 43 44 if(behave >= L2_UNKOWN_MULTICAST_END) 45 return RT_ERR_NOT_ALLOWED; 46 if(port < 8) 47 { 48 retVal = rtl8367c_setAsicRegBits(RTL8367C_UNKNOWN_L2_MULTICAST_REG(port), RTL8367C_UNKNOWN_L2_MULTICAST_MASK(port), behave); 49 if(retVal != RT_ERR_OK) 50 return retVal; 51 } 52 else 53 { 54 retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_UNKNOWN_L2_MULTICAST_CTRL1, 3 << ((port - 8) << 1), behave); 55 if(retVal != RT_ERR_OK) 56 return retVal; 57 } 58 59 return RT_ERR_OK; 60} 61/* Function Name: 62 * rtl8367c_getAsicUnknownL2MulticastBehavior 63 * Description: 64 * Get behavior of L2 multicast 65 * Input: 66 * port - Physical port number (0~7) 67 * pBehave - 0: flooding, 1: drop, 2: trap 68 * Output: 69 * None 70 * Return: 71 * RT_ERR_OK - Success 72 * RT_ERR_SMI - SMI access error 73 * RT_ERR_PORT_ID - Invalid port number 74 * Note: 75 * None 76 */ 77ret_t rtl8367c_getAsicUnknownL2MulticastBehavior(rtk_uint32 port, rtk_uint32 *pBehave) 78{ 79 ret_t retVal; 80 81 if(port > RTL8367C_PORTIDMAX) 82 return RT_ERR_PORT_ID; 83 84 if(port < 8) 85 { 86 retVal = rtl8367c_getAsicRegBits(RTL8367C_UNKNOWN_L2_MULTICAST_REG(port), RTL8367C_UNKNOWN_L2_MULTICAST_MASK(port), pBehave); 87 if (retVal != RT_ERR_OK) 88 return retVal; 89 } 90 else 91 { 92 retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_UNKNOWN_L2_MULTICAST_CTRL1, 3 << ((port - 8) << 1), pBehave); 93 if (retVal != RT_ERR_OK) 94 return retVal; 95 } 96 97 return RT_ERR_OK; 98} 99/* Function Name: 100 * rtl8367c_setAsicUnknownIPv4MulticastBehavior 101 * Description: 102 * Set behavior of IPv4 multicast 103 * Input: 104 * port - Physical port number (0~7) 105 * behave - 0: flooding, 1: drop, 2: trap 106 * Output: 107 * None 108 * Return: 109 * RT_ERR_OK - Success 110 * RT_ERR_SMI - SMI access error 111 * RT_ERR_PORT_ID - Invalid port number 112 * RT_ERR_NOT_ALLOWED - Invalid operation 113 * Note: 114 * None 115 */ 116ret_t rtl8367c_setAsicUnknownIPv4MulticastBehavior(rtk_uint32 port, rtk_uint32 behave) 117{ 118 if(port > RTL8367C_PORTIDMAX) 119 return RT_ERR_PORT_ID; 120 121 if(behave >= L3_UNKOWN_MULTICAST_END) 122 return RT_ERR_NOT_ALLOWED; 123 124 return rtl8367c_setAsicRegBits(RTL8367C_UNKNOWN_IPV4_MULTICAST_REG(port), RTL8367C_UNKNOWN_IPV4_MULTICAST_MASK(port), behave); 125} 126/* Function Name: 127 * rtl8367c_getAsicUnknownIPv4MulticastBehavior 128 * Description: 129 * Get behavior of IPv4 multicast 130 * Input: 131 * port - Physical port number (0~7) 132 * pBehave - 0: flooding, 1: drop, 2: trap 133 * Output: 134 * None 135 * Return: 136 * RT_ERR_OK - Success 137 * RT_ERR_SMI - SMI access error 138 * RT_ERR_PORT_ID - Invalid port number 139 * Note: 140 * None 141 */ 142ret_t rtl8367c_getAsicUnknownIPv4MulticastBehavior(rtk_uint32 port, rtk_uint32 *pBehave) 143{ 144 if(port > RTL8367C_PORTIDMAX) 145 return RT_ERR_PORT_ID; 146 147 return rtl8367c_getAsicRegBits(RTL8367C_UNKNOWN_IPV4_MULTICAST_REG(port), RTL8367C_UNKNOWN_IPV4_MULTICAST_MASK(port), pBehave); 148} 149/* Function Name: 150 * rtl8367c_setAsicUnknownIPv6MulticastBehavior 151 * Description: 152 * Set behavior of IPv6 multicast 153 * Input: 154 * port - Physical port number (0~7) 155 * behave - 0: flooding, 1: drop, 2: trap 156 * Output: 157 * None 158 * Return: 159 * RT_ERR_OK - Success 160 * RT_ERR_SMI - SMI access error 161 * RT_ERR_PORT_ID - Invalid port number 162 * RT_ERR_NOT_ALLOWED - Invalid operation 163 * Note: 164 * None 165 */ 166ret_t rtl8367c_setAsicUnknownIPv6MulticastBehavior(rtk_uint32 port, rtk_uint32 behave) 167{ 168 if(port > RTL8367C_PORTIDMAX) 169 return RT_ERR_PORT_ID; 170 171 if(behave >= L3_UNKOWN_MULTICAST_END) 172 return RT_ERR_NOT_ALLOWED; 173 174 return rtl8367c_setAsicRegBits(RTL8367C_UNKNOWN_IPV6_MULTICAST_REG(port), RTL8367C_UNKNOWN_IPV6_MULTICAST_MASK(port), behave); 175} 176/* Function Name: 177 * rtl8367c_getAsicUnknownIPv6MulticastBehavior 178 * Description: 179 * Get behavior of IPv6 multicast 180 * Input: 181 * port - Physical port number (0~7) 182 * pBehave - 0: flooding, 1: drop, 2: trap 183 * Output: 184 * None 185 * Return: 186 * RT_ERR_OK - Success 187 * RT_ERR_SMI - SMI access error 188 * RT_ERR_PORT_ID - Invalid port number 189 * Note: 190 * None 191 */ 192ret_t rtl8367c_getAsicUnknownIPv6MulticastBehavior(rtk_uint32 port, rtk_uint32 *pBehave) 193{ 194 if(port > RTL8367C_PORTIDMAX) 195 return RT_ERR_PORT_ID; 196 197 return rtl8367c_getAsicRegBits(RTL8367C_UNKNOWN_IPV6_MULTICAST_REG(port), RTL8367C_UNKNOWN_IPV6_MULTICAST_MASK(port), pBehave); 198} 199/* Function Name: 200 * rtl8367c_setAsicUnknownMulticastTrapPriority 201 * Description: 202 * Set trap priority of unknown multicast frame 203 * Input: 204 * priority - priority (0~7) 205 * Output: 206 * None 207 * Return: 208 * RT_ERR_OK - Success 209 * RT_ERR_SMI - SMI access error 210 * RT_ERR_QOS_INT_PRIORITY - Invalid priority 211 * Note: 212 * None 213 */ 214ret_t rtl8367c_setAsicUnknownMulticastTrapPriority(rtk_uint32 priority) 215{ 216 if(priority > RTL8367C_PRIMAX) 217 return RT_ERR_QOS_INT_PRIORITY; 218 219 return rtl8367c_setAsicRegBits(RTL8367C_QOS_TRAP_PRIORITY_CTRL0_REG, RTL8367C_UNKNOWN_MC_PRIORTY_MASK, priority); 220} 221/* Function Name: 222 * rtl8367c_getAsicUnknownMulticastTrapPriority 223 * Description: 224 * Get trap priority of unknown multicast frame 225 * Input: 226 * pPriority - priority (0~7) 227 * Output: 228 * None 229 * Return: 230 * RT_ERR_OK - Success 231 * RT_ERR_SMI - SMI access error 232 * Note: 233 * None 234 */ 235ret_t rtl8367c_getAsicUnknownMulticastTrapPriority(rtk_uint32 *pPriority) 236{ 237 return rtl8367c_getAsicRegBits(RTL8367C_QOS_TRAP_PRIORITY_CTRL0_REG, RTL8367C_UNKNOWN_MC_PRIORTY_MASK, pPriority); 238} 239