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 : Port mirror related functions
17 #include <rtl8367c_asicdrv_mirror.h>
19 * rtl8367c_setAsicPortMirror
21 * Set port mirror function
23 * source - Source port
24 * monitor - Monitor (destination) port
29 * RT_ERR_SMI - SMI access error
30 * RT_ERR_PORT_ID - Invalid port number
34 ret_t
rtl8367c_setAsicPortMirror(rtk_uint32 source
, rtk_uint32 monitor
)
38 if((source
> RTL8367C_PORTIDMAX
) || (monitor
> RTL8367C_PORTIDMAX
))
39 return RT_ERR_PORT_ID
;
41 retVal
= rtl8367c_setAsicRegBits(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_SOURCE_PORT_MASK
, source
);
42 if(retVal
!= RT_ERR_OK
)
46 return rtl8367c_setAsicRegBits(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_MONITOR_PORT_MASK
, monitor
);
49 * rtl8367c_getAsicPortMirror
51 * Get port mirror function
53 * pSource - Source port
54 * pMonitor - Monitor (destination) port
59 * RT_ERR_SMI - SMI access error
63 ret_t
rtl8367c_getAsicPortMirror(rtk_uint32
*pSource
, rtk_uint32
*pMonitor
)
67 retVal
= rtl8367c_getAsicRegBits(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_SOURCE_PORT_MASK
, pSource
);
68 if(retVal
!= RT_ERR_OK
)
71 return rtl8367c_getAsicRegBits(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_MONITOR_PORT_MASK
, pMonitor
);
74 * rtl8367c_setAsicPortMirrorRxFunction
76 * Set the mirror function on RX of the mirrored
78 * enabled - 1: enabled, 0: disabled
83 * RT_ERR_SMI - SMI access error
87 ret_t
rtl8367c_setAsicPortMirrorRxFunction(rtk_uint32 enabled
)
89 return rtl8367c_setAsicRegBit(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_RX_OFFSET
, enabled
);
92 * rtl8367c_getAsicPortMirrorRxFunction
94 * Get the mirror function on RX of the mirrored
96 * pEnabled - 1: enabled, 0: disabled
100 * RT_ERR_OK - Success
101 * RT_ERR_SMI - SMI access error
105 ret_t
rtl8367c_getAsicPortMirrorRxFunction(rtk_uint32
* pEnabled
)
107 return rtl8367c_getAsicRegBit(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_RX_OFFSET
, pEnabled
);
110 * rtl8367c_setAsicPortMirrorTxFunction
112 * Set the mirror function on TX of the mirrored
114 * enabled - 1: enabled, 0: disabled
118 * RT_ERR_OK - Success
119 * RT_ERR_SMI - SMI access error
123 ret_t
rtl8367c_setAsicPortMirrorTxFunction(rtk_uint32 enabled
)
125 return rtl8367c_setAsicRegBit(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_TX_OFFSET
, enabled
);
128 * rtl8367c_getAsicPortMirrorTxFunction
130 * Get the mirror function on TX of the mirrored
132 * pEnabled - 1: enabled, 0: disabled
136 * RT_ERR_OK - Success
137 * RT_ERR_SMI - SMI access error
141 ret_t
rtl8367c_getAsicPortMirrorTxFunction(rtk_uint32
* pEnabled
)
143 return rtl8367c_getAsicRegBit(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_TX_OFFSET
, pEnabled
);
146 * rtl8367c_setAsicPortMirrorIsolation
148 * Set the traffic isolation on monitor port
150 * enabled - 1: enabled, 0: disabled
154 * RT_ERR_OK - Success
155 * RT_ERR_SMI - SMI access error
159 ret_t
rtl8367c_setAsicPortMirrorIsolation(rtk_uint32 enabled
)
161 return rtl8367c_setAsicRegBit(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_ISO_OFFSET
, enabled
);
164 * rtl8367c_getAsicPortMirrorIsolation
166 * Get the traffic isolation on monitor port
168 * pEnabled - 1: enabled, 0: disabled
172 * RT_ERR_OK - Success
173 * RT_ERR_SMI - SMI access error
177 ret_t
rtl8367c_getAsicPortMirrorIsolation(rtk_uint32
* pEnabled
)
179 return rtl8367c_getAsicRegBit(RTL8367C_MIRROR_CTRL_REG
, RTL8367C_MIRROR_ISO_OFFSET
, pEnabled
);
183 * rtl8367c_setAsicPortMirrorMask
185 * Set mirror source port mask
187 * SourcePortmask - Source Portmask
191 * RT_ERR_OK - Success
192 * RT_ERR_SMI - SMI access error
193 * RT_ERR_PORT_MASK- Port Mask Error
197 ret_t
rtl8367c_setAsicPortMirrorMask(rtk_uint32 SourcePortmask
)
199 if( SourcePortmask
> RTL8367C_PORTMASK
)
200 return RT_ERR_PORT_MASK
;
202 return rtl8367c_setAsicRegBits(RTL8367C_REG_MIRROR_SRC_PMSK
, RTL8367C_MIRROR_SRC_PMSK_MASK
, SourcePortmask
);
206 * rtl8367c_getAsicPortMirrorMask
208 * Get mirror source port mask
212 * pSourcePortmask - Source Portmask
214 * RT_ERR_OK - Success
215 * RT_ERR_SMI - SMI access error
216 * RT_ERR_PORT_MASK- Port Mask Error
220 ret_t
rtl8367c_getAsicPortMirrorMask(rtk_uint32
*pSourcePortmask
)
222 return rtl8367c_getAsicRegBits(RTL8367C_REG_MIRROR_SRC_PMSK
, RTL8367C_MIRROR_SRC_PMSK_MASK
, pSourcePortmask
);
226 * rtl8367c_setAsicPortMirrorVlanRxLeaky
228 * Set the mirror function of VLAN RX leaky
230 * enabled - 1: enabled, 0: disabled
234 * RT_ERR_OK - Success
235 * RT_ERR_SMI - SMI access error
239 ret_t
rtl8367c_setAsicPortMirrorVlanRxLeaky(rtk_uint32 enabled
)
241 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_RX_VLAN_LEAKY_OFFSET
, enabled
);
244 * rtl8367c_getAsicPortMirrorVlanRxLeaky
246 * Get the mirror function of VLAN RX leaky
248 * pEnabled - 1: enabled, 0: disabled
252 * RT_ERR_OK - Success
253 * RT_ERR_SMI - SMI access error
257 ret_t
rtl8367c_getAsicPortMirrorVlanRxLeaky(rtk_uint32
* pEnabled
)
259 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_RX_VLAN_LEAKY_OFFSET
, pEnabled
);
263 * rtl8367c_setAsicPortMirrorVlanTxLeaky
265 * Set the mirror function of VLAN TX leaky
267 * enabled - 1: enabled, 0: disabled
271 * RT_ERR_OK - Success
272 * RT_ERR_SMI - SMI access error
276 ret_t
rtl8367c_setAsicPortMirrorVlanTxLeaky(rtk_uint32 enabled
)
278 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_TX_VLAN_LEAKY_OFFSET
, enabled
);
281 * rtl8367c_getAsicPortMirrorVlanTxLeaky
283 * Get the mirror function of VLAN TX leaky
285 * pEnabled - 1: enabled, 0: disabled
289 * RT_ERR_OK - Success
290 * RT_ERR_SMI - SMI access error
294 ret_t
rtl8367c_getAsicPortMirrorVlanTxLeaky(rtk_uint32
* pEnabled
)
296 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_TX_VLAN_LEAKY_OFFSET
, pEnabled
);
300 * rtl8367c_setAsicPortMirrorIsolationRxLeaky
302 * Set the mirror function of Isolation RX leaky
304 * enabled - 1: enabled, 0: disabled
308 * RT_ERR_OK - Success
309 * RT_ERR_SMI - SMI access error
313 ret_t
rtl8367c_setAsicPortMirrorIsolationRxLeaky(rtk_uint32 enabled
)
315 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_RX_ISOLATION_LEAKY_OFFSET
, enabled
);
318 * rtl8367c_getAsicPortMirrorIsolationRxLeaky
320 * Get the mirror function of VLAN RX leaky
322 * pEnabled - 1: enabled, 0: disabled
326 * RT_ERR_OK - Success
327 * RT_ERR_SMI - SMI access error
331 ret_t
rtl8367c_getAsicPortMirrorIsolationRxLeaky(rtk_uint32
* pEnabled
)
333 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_RX_ISOLATION_LEAKY_OFFSET
, pEnabled
);
337 * rtl8367c_setAsicPortMirrorIsolationTxLeaky
339 * Set the mirror function of Isolation TX leaky
341 * enabled - 1: enabled, 0: disabled
345 * RT_ERR_OK - Success
346 * RT_ERR_SMI - SMI access error
350 ret_t
rtl8367c_setAsicPortMirrorIsolationTxLeaky(rtk_uint32 enabled
)
352 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_TX_ISOLATION_LEAKY_OFFSET
, enabled
);
355 * rtl8367c_getAsicPortMirrorIsolationTxLeaky
357 * Get the mirror function of VLAN TX leaky
359 * pEnabled - 1: enabled, 0: disabled
363 * RT_ERR_OK - Success
364 * RT_ERR_SMI - SMI access error
368 ret_t
rtl8367c_getAsicPortMirrorIsolationTxLeaky(rtk_uint32
* pEnabled
)
370 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_TX_ISOLATION_LEAKY_OFFSET
, pEnabled
);
374 * rtl8367c_setAsicPortMirrorRealKeep
376 * Set the mirror function of keep format
378 * mode - 1: keep original format, 0: follow VLAN config
382 * RT_ERR_OK - Success
383 * RT_ERR_SMI - SMI access error
387 ret_t
rtl8367c_setAsicPortMirrorRealKeep(rtk_uint32 mode
)
389 return rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_REALKEEP_EN_OFFSET
, mode
);
392 * rtl8367c_getAsicPortMirrorRealKeep
394 * Get the mirror function of keep format
396 * pMode - 1: keep original format, 0: follow VLAN config
400 * RT_ERR_OK - Success
401 * RT_ERR_SMI - SMI access error
405 ret_t
rtl8367c_getAsicPortMirrorRealKeep(rtk_uint32
* pMode
)
407 return rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL2
, RTL8367C_MIRROR_REALKEEP_EN_OFFSET
, pMode
);
411 * rtl8367c_setAsicPortMirrorOverride
413 * Set the mirror function of override
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
421 * RT_ERR_OK - Success
422 * RT_ERR_SMI - SMI access error
426 ret_t
rtl8367c_setAsicPortMirrorOverride(rtk_uint32 rxMirror
, rtk_uint32 txMirror
, rtk_uint32 aclMirror
)
430 if((retVal
= rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL3
, RTL8367C_MIRROR_RX_OVERRIDE_EN_OFFSET
, rxMirror
)) != RT_ERR_OK
)
433 if((retVal
= rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL3
, RTL8367C_MIRROR_TX_OVERRIDE_EN_OFFSET
, txMirror
)) != RT_ERR_OK
)
436 if((retVal
= rtl8367c_setAsicRegBit(RTL8367C_REG_MIRROR_CTRL3
, RTL8367C_MIRROR_ACL_OVERRIDE_EN_OFFSET
, aclMirror
)) != RT_ERR_OK
)
443 * rtl8367c_getAsicPortMirrorOverride
445 * Get the mirror function of override
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
453 * RT_ERR_OK - Success
454 * RT_ERR_SMI - SMI access error
458 ret_t
rtl8367c_getAsicPortMirrorOverride(rtk_uint32
*pRxMirror
, rtk_uint32
*pTxMirror
, rtk_uint32
*pAclMirror
)
462 if((retVal
= rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL3
, RTL8367C_MIRROR_RX_OVERRIDE_EN_OFFSET
, pRxMirror
)) != RT_ERR_OK
)
465 if((retVal
= rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL3
, RTL8367C_MIRROR_TX_OVERRIDE_EN_OFFSET
, pTxMirror
)) != RT_ERR_OK
)
468 if((retVal
= rtl8367c_getAsicRegBit(RTL8367C_REG_MIRROR_CTRL3
, RTL8367C_MIRROR_ACL_OVERRIDE_EN_OFFSET
, pAclMirror
)) != RT_ERR_OK
)