2 * Copyright (C) 2013 Realtek Semiconductor Corp.
5 * Unless you and Realtek execute a separate written software license
6 * agreement governing use of this software, this software is licensed
7 * to you under the terms of the GNU General Public License version 2,
8 * available at https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
11 * $Date: 2017-03-08 15:13:58 +0800 (週三, 08 三月 2017) $
13 * Purpose : RTL8367C switch high-level API for RTL8367C
14 * Feature : Unkown multicast related functions
18 #include <rtl8367c_asicdrv_unknownMulticast.h>
21 * rtl8367c_setAsicUnknownL2MulticastBehavior
23 * Set behavior of L2 multicast
25 * port - Physical port number (0~7)
26 * behave - 0: flooding, 1: drop, 2: trap
31 * RT_ERR_SMI - SMI access error
32 * RT_ERR_PORT_ID - Invalid port number
33 * RT_ERR_NOT_ALLOWED - Invalid operation
37 ret_t
rtl8367c_setAsicUnknownL2MulticastBehavior(rtk_uint32 port
, rtk_uint32 behave
)
41 if(port
> RTL8367C_PORTIDMAX
)
42 return RT_ERR_PORT_ID
;
44 if(behave
>= L2_UNKOWN_MULTICAST_END
)
45 return RT_ERR_NOT_ALLOWED
;
48 retVal
= rtl8367c_setAsicRegBits(RTL8367C_UNKNOWN_L2_MULTICAST_REG(port
), RTL8367C_UNKNOWN_L2_MULTICAST_MASK(port
), behave
);
49 if(retVal
!= RT_ERR_OK
)
54 retVal
= rtl8367c_setAsicRegBits(RTL8367C_REG_UNKNOWN_L2_MULTICAST_CTRL1
, 3 << ((port
- 8) << 1), behave
);
55 if(retVal
!= RT_ERR_OK
)
62 * rtl8367c_getAsicUnknownL2MulticastBehavior
64 * Get behavior of L2 multicast
66 * port - Physical port number (0~7)
67 * pBehave - 0: flooding, 1: drop, 2: trap
72 * RT_ERR_SMI - SMI access error
73 * RT_ERR_PORT_ID - Invalid port number
77 ret_t
rtl8367c_getAsicUnknownL2MulticastBehavior(rtk_uint32 port
, rtk_uint32
*pBehave
)
81 if(port
> RTL8367C_PORTIDMAX
)
82 return RT_ERR_PORT_ID
;
86 retVal
= rtl8367c_getAsicRegBits(RTL8367C_UNKNOWN_L2_MULTICAST_REG(port
), RTL8367C_UNKNOWN_L2_MULTICAST_MASK(port
), pBehave
);
87 if (retVal
!= RT_ERR_OK
)
92 retVal
= rtl8367c_getAsicRegBits(RTL8367C_REG_UNKNOWN_L2_MULTICAST_CTRL1
, 3 << ((port
- 8) << 1), pBehave
);
93 if (retVal
!= RT_ERR_OK
)
100 * rtl8367c_setAsicUnknownIPv4MulticastBehavior
102 * Set behavior of IPv4 multicast
104 * port - Physical port number (0~7)
105 * behave - 0: flooding, 1: drop, 2: trap
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
116 ret_t
rtl8367c_setAsicUnknownIPv4MulticastBehavior(rtk_uint32 port
, rtk_uint32 behave
)
118 if(port
> RTL8367C_PORTIDMAX
)
119 return RT_ERR_PORT_ID
;
121 if(behave
>= L3_UNKOWN_MULTICAST_END
)
122 return RT_ERR_NOT_ALLOWED
;
124 return rtl8367c_setAsicRegBits(RTL8367C_UNKNOWN_IPV4_MULTICAST_REG(port
), RTL8367C_UNKNOWN_IPV4_MULTICAST_MASK(port
), behave
);
127 * rtl8367c_getAsicUnknownIPv4MulticastBehavior
129 * Get behavior of IPv4 multicast
131 * port - Physical port number (0~7)
132 * pBehave - 0: flooding, 1: drop, 2: trap
136 * RT_ERR_OK - Success
137 * RT_ERR_SMI - SMI access error
138 * RT_ERR_PORT_ID - Invalid port number
142 ret_t
rtl8367c_getAsicUnknownIPv4MulticastBehavior(rtk_uint32 port
, rtk_uint32
*pBehave
)
144 if(port
> RTL8367C_PORTIDMAX
)
145 return RT_ERR_PORT_ID
;
147 return rtl8367c_getAsicRegBits(RTL8367C_UNKNOWN_IPV4_MULTICAST_REG(port
), RTL8367C_UNKNOWN_IPV4_MULTICAST_MASK(port
), pBehave
);
150 * rtl8367c_setAsicUnknownIPv6MulticastBehavior
152 * Set behavior of IPv6 multicast
154 * port - Physical port number (0~7)
155 * behave - 0: flooding, 1: drop, 2: trap
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
166 ret_t
rtl8367c_setAsicUnknownIPv6MulticastBehavior(rtk_uint32 port
, rtk_uint32 behave
)
168 if(port
> RTL8367C_PORTIDMAX
)
169 return RT_ERR_PORT_ID
;
171 if(behave
>= L3_UNKOWN_MULTICAST_END
)
172 return RT_ERR_NOT_ALLOWED
;
174 return rtl8367c_setAsicRegBits(RTL8367C_UNKNOWN_IPV6_MULTICAST_REG(port
), RTL8367C_UNKNOWN_IPV6_MULTICAST_MASK(port
), behave
);
177 * rtl8367c_getAsicUnknownIPv6MulticastBehavior
179 * Get behavior of IPv6 multicast
181 * port - Physical port number (0~7)
182 * pBehave - 0: flooding, 1: drop, 2: trap
186 * RT_ERR_OK - Success
187 * RT_ERR_SMI - SMI access error
188 * RT_ERR_PORT_ID - Invalid port number
192 ret_t
rtl8367c_getAsicUnknownIPv6MulticastBehavior(rtk_uint32 port
, rtk_uint32
*pBehave
)
194 if(port
> RTL8367C_PORTIDMAX
)
195 return RT_ERR_PORT_ID
;
197 return rtl8367c_getAsicRegBits(RTL8367C_UNKNOWN_IPV6_MULTICAST_REG(port
), RTL8367C_UNKNOWN_IPV6_MULTICAST_MASK(port
), pBehave
);
200 * rtl8367c_setAsicUnknownMulticastTrapPriority
202 * Set trap priority of unknown multicast frame
204 * priority - priority (0~7)
208 * RT_ERR_OK - Success
209 * RT_ERR_SMI - SMI access error
210 * RT_ERR_QOS_INT_PRIORITY - Invalid priority
214 ret_t
rtl8367c_setAsicUnknownMulticastTrapPriority(rtk_uint32 priority
)
216 if(priority
> RTL8367C_PRIMAX
)
217 return RT_ERR_QOS_INT_PRIORITY
;
219 return rtl8367c_setAsicRegBits(RTL8367C_QOS_TRAP_PRIORITY_CTRL0_REG
, RTL8367C_UNKNOWN_MC_PRIORTY_MASK
, priority
);
222 * rtl8367c_getAsicUnknownMulticastTrapPriority
224 * Get trap priority of unknown multicast frame
226 * pPriority - priority (0~7)
230 * RT_ERR_OK - Success
231 * RT_ERR_SMI - SMI access error
235 ret_t
rtl8367c_getAsicUnknownMulticastTrapPriority(rtk_uint32
*pPriority
)
237 return rtl8367c_getAsicRegBits(RTL8367C_QOS_TRAP_PRIORITY_CTRL0_REG
, RTL8367C_UNKNOWN_MC_PRIORTY_MASK
, pPriority
);