kernel: add missing config symbols for 5.15
[openwrt/openwrt.git] / target / linux / mediatek / files-5.10 / drivers / net / phy / rtk / rtl8367c / rtl8367c_asicdrv_mirror.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 : Port mirror related functions
15 *
16 */
17 #include <rtl8367c_asicdrv_mirror.h>
18 /* Function Name:
19 * rtl8367c_setAsicPortMirror
20 * Description:
21 * Set port mirror function
22 * Input:
23 * source - Source port
24 * monitor - Monitor (destination) port
25 * Output:
26 * None
27 * Return:
28 * RT_ERR_OK - Success
29 * RT_ERR_SMI - SMI access error
30 * RT_ERR_PORT_ID - Invalid port number
31 * Note:
32 * None
33 */
34 ret_t rtl8367c_setAsicPortMirror(rtk_uint32 source, rtk_uint32 monitor)
35 {
36 ret_t retVal;
37
38 if((source > RTL8367C_PORTIDMAX) || (monitor > RTL8367C_PORTIDMAX))
39 return RT_ERR_PORT_ID;
40
41 retVal = rtl8367c_setAsicRegBits(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_SOURCE_PORT_MASK, source);
42 if(retVal != RT_ERR_OK)
43 return retVal;
44
45
46 return rtl8367c_setAsicRegBits(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_MONITOR_PORT_MASK, monitor);
47 }
48 /* Function Name:
49 * rtl8367c_getAsicPortMirror
50 * Description:
51 * Get port mirror function
52 * Input:
53 * pSource - Source port
54 * pMonitor - Monitor (destination) port
55 * Output:
56 * None
57 * Return:
58 * RT_ERR_OK - Success
59 * RT_ERR_SMI - SMI access error
60 * Note:
61 * None
62 */
63 ret_t rtl8367c_getAsicPortMirror(rtk_uint32 *pSource, rtk_uint32 *pMonitor)
64 {
65 ret_t retVal;
66
67 retVal = rtl8367c_getAsicRegBits(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_SOURCE_PORT_MASK, pSource);
68 if(retVal != RT_ERR_OK)
69 return retVal;
70
71 return rtl8367c_getAsicRegBits(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_MONITOR_PORT_MASK, pMonitor);
72 }
73 /* Function Name:
74 * rtl8367c_setAsicPortMirrorRxFunction
75 * Description:
76 * Set the mirror function on RX of the mirrored
77 * Input:
78 * enabled - 1: enabled, 0: disabled
79 * Output:
80 * None
81 * Return:
82 * RT_ERR_OK - Success
83 * RT_ERR_SMI - SMI access error
84 * Note:
85 * None
86 */
87 ret_t rtl8367c_setAsicPortMirrorRxFunction(rtk_uint32 enabled)
88 {
89 return rtl8367c_setAsicRegBit(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_RX_OFFSET, enabled);
90 }
91 /* Function Name:
92 * rtl8367c_getAsicPortMirrorRxFunction
93 * Description:
94 * Get the mirror function on RX of the mirrored
95 * Input:
96 * pEnabled - 1: enabled, 0: disabled
97 * Output:
98 * None
99 * Return:
100 * RT_ERR_OK - Success
101 * RT_ERR_SMI - SMI access error
102 * Note:
103 * None
104 */
105 ret_t rtl8367c_getAsicPortMirrorRxFunction(rtk_uint32* pEnabled)
106 {
107 return rtl8367c_getAsicRegBit(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_RX_OFFSET, pEnabled);
108 }
109 /* Function Name:
110 * rtl8367c_setAsicPortMirrorTxFunction
111 * Description:
112 * Set the mirror function on TX of the mirrored
113 * Input:
114 * enabled - 1: enabled, 0: disabled
115 * Output:
116 * None
117 * Return:
118 * RT_ERR_OK - Success
119 * RT_ERR_SMI - SMI access error
120 * Note:
121 * None
122 */
123 ret_t rtl8367c_setAsicPortMirrorTxFunction(rtk_uint32 enabled)
124 {
125 return rtl8367c_setAsicRegBit(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_TX_OFFSET, enabled);
126 }
127 /* Function Name:
128 * rtl8367c_getAsicPortMirrorTxFunction
129 * Description:
130 * Get the mirror function on TX of the mirrored
131 * Input:
132 * pEnabled - 1: enabled, 0: disabled
133 * Output:
134 * None
135 * Return:
136 * RT_ERR_OK - Success
137 * RT_ERR_SMI - SMI access error
138 * Note:
139 * None
140 */
141 ret_t rtl8367c_getAsicPortMirrorTxFunction(rtk_uint32* pEnabled)
142 {
143 return rtl8367c_getAsicRegBit(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_TX_OFFSET, pEnabled);
144 }
145 /* Function Name:
146 * rtl8367c_setAsicPortMirrorIsolation
147 * Description:
148 * Set the traffic isolation on monitor port
149 * Input:
150 * enabled - 1: enabled, 0: disabled
151 * Output:
152 * None
153 * Return:
154 * RT_ERR_OK - Success
155 * RT_ERR_SMI - SMI access error
156 * Note:
157 * None
158 */
159 ret_t rtl8367c_setAsicPortMirrorIsolation(rtk_uint32 enabled)
160 {
161 return rtl8367c_setAsicRegBit(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_ISO_OFFSET, enabled);
162 }
163 /* Function Name:
164 * rtl8367c_getAsicPortMirrorIsolation
165 * Description:
166 * Get the traffic isolation on monitor port
167 * Input:
168 * pEnabled - 1: enabled, 0: disabled
169 * Output:
170 * None
171 * Return:
172 * RT_ERR_OK - Success
173 * RT_ERR_SMI - SMI access error
174 * Note:
175 * None
176 */
177 ret_t rtl8367c_getAsicPortMirrorIsolation(rtk_uint32* pEnabled)
178 {
179 return rtl8367c_getAsicRegBit(RTL8367C_MIRROR_CTRL_REG, RTL8367C_MIRROR_ISO_OFFSET, pEnabled);
180 }
181
182 /* Function Name:
183 * rtl8367c_setAsicPortMirrorMask
184 * Description:
185 * Set mirror source port mask
186 * Input:
187 * SourcePortmask - Source Portmask
188 * Output:
189 * None
190 * Return:
191 * RT_ERR_OK - Success
192 * RT_ERR_SMI - SMI access error
193 * RT_ERR_PORT_MASK- Port Mask Error
194 * Note:
195 * None
196 */
197 ret_t rtl8367c_setAsicPortMirrorMask(rtk_uint32 SourcePortmask)
198 {
199 if( SourcePortmask > RTL8367C_PORTMASK)
200 return RT_ERR_PORT_MASK;
201
202 return rtl8367c_setAsicRegBits(RTL8367C_REG_MIRROR_SRC_PMSK, RTL8367C_MIRROR_SRC_PMSK_MASK, SourcePortmask);
203 }
204
205 /* Function Name:
206 * rtl8367c_getAsicPortMirrorMask
207 * Description:
208 * Get mirror source port mask
209 * Input:
210 * None
211 * Output:
212 * pSourcePortmask - Source Portmask
213 * Return:
214 * RT_ERR_OK - Success
215 * RT_ERR_SMI - SMI access error
216 * RT_ERR_PORT_MASK- Port Mask Error
217 * Note:
218 * None
219 */
220 ret_t rtl8367c_getAsicPortMirrorMask(rtk_uint32 *pSourcePortmask)
221 {
222 return rtl8367c_getAsicRegBits(RTL8367C_REG_MIRROR_SRC_PMSK, RTL8367C_MIRROR_SRC_PMSK_MASK, pSourcePortmask);
223 }
224
225 /* Function Name:
226 * rtl8367c_setAsicPortMirrorVlanRxLeaky
227 * Description:
228 * Set the mirror function of VLAN RX leaky
229 * Input:
230 * enabled - 1: enabled, 0: disabled
231 * Output:
232 * None
233 * Return:
234 * RT_ERR_OK - Success
235 * RT_ERR_SMI - SMI access error
236 * Note:
237 * None
238 */
239 ret_t rtl8367c_setAsicPortMirrorVlanRxLeaky(rtk_uint32 enabled)
240 {
241 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_RX_VLAN_LEAKY_OFFSET, enabled);
242 }
243 /* Function Name:
244 * rtl8367c_getAsicPortMirrorVlanRxLeaky
245 * Description:
246 * Get the mirror function of VLAN RX leaky
247 * Input:
248 * pEnabled - 1: enabled, 0: disabled
249 * Output:
250 * None
251 * Return:
252 * RT_ERR_OK - Success
253 * RT_ERR_SMI - SMI access error
254 * Note:
255 * None
256 */
257 ret_t rtl8367c_getAsicPortMirrorVlanRxLeaky(rtk_uint32* pEnabled)
258 {
259 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_RX_VLAN_LEAKY_OFFSET, pEnabled);
260 }
261
262 /* Function Name:
263 * rtl8367c_setAsicPortMirrorVlanTxLeaky
264 * Description:
265 * Set the mirror function of VLAN TX leaky
266 * Input:
267 * enabled - 1: enabled, 0: disabled
268 * Output:
269 * None
270 * Return:
271 * RT_ERR_OK - Success
272 * RT_ERR_SMI - SMI access error
273 * Note:
274 * None
275 */
276 ret_t rtl8367c_setAsicPortMirrorVlanTxLeaky(rtk_uint32 enabled)
277 {
278 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_TX_VLAN_LEAKY_OFFSET, enabled);
279 }
280 /* Function Name:
281 * rtl8367c_getAsicPortMirrorVlanTxLeaky
282 * Description:
283 * Get the mirror function of VLAN TX leaky
284 * Input:
285 * pEnabled - 1: enabled, 0: disabled
286 * Output:
287 * None
288 * Return:
289 * RT_ERR_OK - Success
290 * RT_ERR_SMI - SMI access error
291 * Note:
292 * None
293 */
294 ret_t rtl8367c_getAsicPortMirrorVlanTxLeaky(rtk_uint32* pEnabled)
295 {
296 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_TX_VLAN_LEAKY_OFFSET, pEnabled);
297 }
298
299 /* Function Name:
300 * rtl8367c_setAsicPortMirrorIsolationRxLeaky
301 * Description:
302 * Set the mirror function of Isolation RX leaky
303 * Input:
304 * enabled - 1: enabled, 0: disabled
305 * Output:
306 * None
307 * Return:
308 * RT_ERR_OK - Success
309 * RT_ERR_SMI - SMI access error
310 * Note:
311 * None
312 */
313 ret_t rtl8367c_setAsicPortMirrorIsolationRxLeaky(rtk_uint32 enabled)
314 {
315 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_RX_ISOLATION_LEAKY_OFFSET, enabled);
316 }
317 /* Function Name:
318 * rtl8367c_getAsicPortMirrorIsolationRxLeaky
319 * Description:
320 * Get the mirror function of VLAN RX leaky
321 * Input:
322 * pEnabled - 1: enabled, 0: disabled
323 * Output:
324 * None
325 * Return:
326 * RT_ERR_OK - Success
327 * RT_ERR_SMI - SMI access error
328 * Note:
329 * None
330 */
331 ret_t rtl8367c_getAsicPortMirrorIsolationRxLeaky(rtk_uint32* pEnabled)
332 {
333 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_RX_ISOLATION_LEAKY_OFFSET, pEnabled);
334 }
335
336 /* Function Name:
337 * rtl8367c_setAsicPortMirrorIsolationTxLeaky
338 * Description:
339 * Set the mirror function of Isolation TX leaky
340 * Input:
341 * enabled - 1: enabled, 0: disabled
342 * Output:
343 * None
344 * Return:
345 * RT_ERR_OK - Success
346 * RT_ERR_SMI - SMI access error
347 * Note:
348 * None
349 */
350 ret_t rtl8367c_setAsicPortMirrorIsolationTxLeaky(rtk_uint32 enabled)
351 {
352 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_TX_ISOLATION_LEAKY_OFFSET, enabled);
353 }
354 /* Function Name:
355 * rtl8367c_getAsicPortMirrorIsolationTxLeaky
356 * Description:
357 * Get the mirror function of VLAN TX leaky
358 * Input:
359 * pEnabled - 1: enabled, 0: disabled
360 * Output:
361 * None
362 * Return:
363 * RT_ERR_OK - Success
364 * RT_ERR_SMI - SMI access error
365 * Note:
366 * None
367 */
368 ret_t rtl8367c_getAsicPortMirrorIsolationTxLeaky(rtk_uint32* pEnabled)
369 {
370 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_TX_ISOLATION_LEAKY_OFFSET, pEnabled);
371 }
372
373 /* Function Name:
374 * rtl8367c_setAsicPortMirrorRealKeep
375 * Description:
376 * Set the mirror function of keep format
377 * Input:
378 * mode - 1: keep original format, 0: follow VLAN config
379 * Output:
380 * None
381 * Return:
382 * RT_ERR_OK - Success
383 * RT_ERR_SMI - SMI access error
384 * Note:
385 * None
386 */
387 ret_t rtl8367c_setAsicPortMirrorRealKeep(rtk_uint32 mode)
388 {
389 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_REALKEEP_EN_OFFSET, mode);
390 }
391 /* Function Name:
392 * rtl8367c_getAsicPortMirrorRealKeep
393 * Description:
394 * Get the mirror function of keep format
395 * Input:
396 * pMode - 1: keep original format, 0: follow VLAN config
397 * Output:
398 * None
399 * Return:
400 * RT_ERR_OK - Success
401 * RT_ERR_SMI - SMI access error
402 * Note:
403 * None
404 */
405 ret_t rtl8367c_getAsicPortMirrorRealKeep(rtk_uint32* pMode)
406 {
407 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2, RTL8367C_MIRROR_REALKEEP_EN_OFFSET, pMode);
408 }
409
410 /* Function Name:
411 * rtl8367c_setAsicPortMirrorOverride
412 * Description:
413 * Set the mirror function of override
414 * Input:
415 * rxMirror - 1: output rx Mirror format, 0: output forward format
416 * txMirror - 1: output tx Mirror format, 0: output forward format
417 * aclMirror - 1: output ACL Mirror format, 0: output forward format
418 * Output:
419 * None
420 * Return:
421 * RT_ERR_OK - Success
422 * RT_ERR_SMI - SMI access error
423 * Note:
424 * None
425 */
426 ret_t rtl8367c_setAsicPortMirrorOverride(rtk_uint32 rxMirror, rtk_uint32 txMirror, rtk_uint32 aclMirror)
427 {
428 ret_t retVal;
429
430 if((retVal = rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL3, RTL8367C_MIRROR_RX_OVERRIDE_EN_OFFSET, rxMirror)) != RT_ERR_OK)
431 return retVal;
432
433 if((retVal = rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL3, RTL8367C_MIRROR_TX_OVERRIDE_EN_OFFSET, txMirror)) != RT_ERR_OK)
434 return retVal;
435
436 if((retVal = rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL3, RTL8367C_MIRROR_ACL_OVERRIDE_EN_OFFSET, aclMirror)) != RT_ERR_OK)
437 return retVal;
438
439 return RT_ERR_OK;
440 }
441
442 /* Function Name:
443 * rtl8367c_getAsicPortMirrorOverride
444 * Description:
445 * Get the mirror function of override
446 * Input:
447 * None
448 * Output:
449 * pRxMirror - 1: output rx Mirror format, 0: output forward format
450 * pTxMirror - 1: output tx Mirror format, 0: output forward format
451 * pAclMirror - 1: output ACL Mirror format, 0: output forward format
452 * Return:
453 * RT_ERR_OK - Success
454 * RT_ERR_SMI - SMI access error
455 * Note:
456 * None
457 */
458 ret_t rtl8367c_getAsicPortMirrorOverride(rtk_uint32 *pRxMirror, rtk_uint32 *pTxMirror, rtk_uint32 *pAclMirror)
459 {
460 ret_t retVal;
461
462 if((retVal = rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL3, RTL8367C_MIRROR_RX_OVERRIDE_EN_OFFSET, pRxMirror)) != RT_ERR_OK)
463 return retVal;
464
465 if((retVal = rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL3, RTL8367C_MIRROR_TX_OVERRIDE_EN_OFFSET, pTxMirror)) != RT_ERR_OK)
466 return retVal;
467
468 if((retVal = rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL3, RTL8367C_MIRROR_ACL_OVERRIDE_EN_OFFSET, pAclMirror)) != RT_ERR_OK)
469 return retVal;
470
471 return RT_ERR_OK;
472 }