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