• 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/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: 42321 $
13 * $Date: 2013-08-26 13:51:29 +0800 (������, 26 ������ 2013) $
14 *
15 * Purpose : RTL8367C switch high-level API for RTL8367C
16 * Feature : Unkown multicast related functions
17 *
18 */
19#include <rtl8367c_asicdrv_unknownMulticast.h>
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 */
37ret_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 */
77ret_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 */
116ret_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 */
142ret_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 */
166ret_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 */
192ret_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 */
214ret_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 */
235ret_t rtl8367c_getAsicUnknownMulticastTrapPriority(rtk_uint32 *pPriority)
236{
237    return rtl8367c_getAsicRegBits(RTL8367C_QOS_TRAP_PRIORITY_CTRL0_REG, RTL8367C_UNKNOWN_MC_PRIORTY_MASK, pPriority);
238}
239