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