mediatek: add patches for 5.15 and kernel config for mt7622
[openwrt/openwrt.git] / target / linux / mediatek / files / drivers / net / phy / rtk / rtl8367c / rtl8367c_asicdrv_unknownMulticast.c
1 /*
2 * Copyright (C) 2013 Realtek Semiconductor Corp.
3 * All Rights Reserved.
4 *
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
9 *
10 * $Revision: 76306 $
11 * $Date: 2017-03-08 15:13:58 +0800 (週三, 08 三月 2017) $
12 *
13 * Purpose : RTL8367C switch high-level API for RTL8367C
14 * Feature : Unkown multicast related functions
15 *
16 */
17
18 #include <rtl8367c_asicdrv_unknownMulticast.h>
19
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 */
37 ret_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 */
77 ret_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 */
116 ret_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 */
142 ret_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 */
166 ret_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 */
192 ret_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 */
214 ret_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 */
235 ret_t rtl8367c_getAsicUnknownMulticastTrapPriority(rtk_uint32 *pPriority)
236 {
237 return rtl8367c_getAsicRegBits(RTL8367C_QOS_TRAP_PRIORITY_CTRL0_REG, RTL8367C_UNKNOWN_MC_PRIORTY_MASK, pPriority);
238 }