• 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: 38651 $
13 * $Date: 2013-04-17 14:32:56 +0800 (������, 17 ������ 2013) $
14 *
15 * Purpose : RTL8367C switch high-level API for RTL8367C
16 * Feature : RMA related functions
17 *
18 */
19#include <rtl8367c_asicdrv_rma.h>
20/* Function Name:
21 *      rtl8367c_setAsicRma
22 * Description:
23 *      Set reserved multicast address for CPU trapping
24 * Input:
25 *      index     - reserved multicast LSB byte, 0x00~0x2F is available value
26 *      pRmacfg     - type of RMA for trapping frame type setting
27 * Output:
28 *      None
29 * Return:
30 *      RT_ERR_OK         - Success
31 *      RT_ERR_SMI      - SMI access error
32 *      RT_ERR_RMA_ADDR - Invalid RMA address index
33 * Note:
34 *      None
35 */
36ret_t rtl8367c_setAsicRma(rtk_uint32 index, rtl8367c_rma_t* pRmacfg)
37{
38    rtk_uint32 regData;
39    ret_t retVal;
40
41    if(index > RTL8367C_RMAMAX)
42        return RT_ERR_RMA_ADDR;
43
44    regData = *(rtk_uint16*)pRmacfg;
45
46    if( (index >= 0x4 && index <= 0x7) || (index >= 0x9 && index <= 0x0C) || (0x0F == index))
47        index = 0x04;
48    else if((index >= 0x13 && index <= 0x17) || (0x19 == index) || (index >= 0x1B && index <= 0x1f))
49        index = 0x13;
50    else if(index >= 0x22 && index <= 0x2F)
51        index = 0x22;
52
53    retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, pRmacfg->trap_priority);
54    if(retVal != RT_ERR_OK)
55        return retVal;
56
57    return rtl8367c_setAsicReg(RTL8367C_REG_RMA_CTRL00+index, regData);
58}
59/* Function Name:
60 *      rtl8367c_getAsicRma
61 * Description:
62 *      Get reserved multicast address for CPU trapping
63 * Input:
64 *      index     - reserved multicast LSB byte, 0x00~0x2F is available value
65 *      rmacfg     - type of RMA for trapping frame type setting
66 * Output:
67 *      None
68 * Return:
69 *      RT_ERR_OK         - Success
70 *      RT_ERR_SMI      - SMI access error
71 *      RT_ERR_RMA_ADDR - Invalid RMA address index
72 * Note:
73 *      None
74 */
75ret_t rtl8367c_getAsicRma(rtk_uint32 index, rtl8367c_rma_t* pRmacfg)
76{
77    ret_t retVal;
78    rtk_uint32 regData;
79
80    if(index > RTL8367C_RMAMAX)
81        return RT_ERR_RMA_ADDR;
82
83    if( (index >= 0x4 && index <= 0x7) || (index >= 0x9 && index <= 0x0C) || (0x0F == index))
84        index = 0x04;
85    else if((index >= 0x13 && index <= 0x17) || (0x19 == index) || (index >= 0x1B && index <= 0x1f))
86        index = 0x13;
87    else if(index >= 0x22 && index <= 0x2F)
88        index = 0x22;
89
90    retVal = rtl8367c_getAsicReg(RTL8367C_REG_RMA_CTRL00+index, &regData);
91    if(retVal != RT_ERR_OK)
92        return retVal;
93
94    *pRmacfg = *(rtl8367c_rma_t*)(&regData);
95
96    retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, &regData);
97    if(retVal != RT_ERR_OK)
98        return retVal;
99
100    pRmacfg->trap_priority = regData;
101
102    return RT_ERR_OK;
103}
104
105/* Function Name:
106 *      rtl8367c_setAsicRmaCdp
107 * Description:
108 *      Set CDP(Cisco Discovery Protocol) for CPU trapping
109 * Input:
110 *      pRmacfg     - type of RMA for trapping frame type setting
111 * Output:
112 *      None
113 * Return:
114 *      RT_ERR_OK         - Success
115 *      RT_ERR_SMI      - SMI access error
116 *      RT_ERR_RMA_ADDR - Invalid RMA address index
117 * Note:
118 *      None
119 */
120ret_t rtl8367c_setAsicRmaCdp(rtl8367c_rma_t* pRmacfg)
121{
122    rtk_uint32 regData;
123    ret_t retVal;
124
125    if(pRmacfg->operation >= RMAOP_END)
126        return RT_ERR_RMA_ACTION;
127
128    if(pRmacfg->trap_priority > RTL8367C_PRIMAX)
129        return RT_ERR_QOS_INT_PRIORITY;
130
131    regData = *(rtk_uint16*)pRmacfg;
132
133    retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, pRmacfg->trap_priority);
134    if(retVal != RT_ERR_OK)
135        return retVal;
136
137    return rtl8367c_setAsicReg(RTL8367C_REG_RMA_CTRL_CDP, regData);
138}
139/* Function Name:
140 *      rtl8367c_getAsicRmaCdp
141 * Description:
142 *      Get CDP(Cisco Discovery Protocol) for CPU trapping
143 * Input:
144 *      None
145 * Output:
146 *      pRmacfg     - type of RMA for trapping frame type setting
147 * Return:
148 *      RT_ERR_OK         - Success
149 *      RT_ERR_SMI      - SMI access error
150 *      RT_ERR_RMA_ADDR - Invalid RMA address index
151 * Note:
152 *      None
153 */
154ret_t rtl8367c_getAsicRmaCdp(rtl8367c_rma_t* pRmacfg)
155{
156    ret_t retVal;
157    rtk_uint32 regData;
158
159    retVal = rtl8367c_getAsicReg(RTL8367C_REG_RMA_CTRL_CDP, &regData);
160    if(retVal != RT_ERR_OK)
161        return retVal;
162
163    *pRmacfg = *(rtl8367c_rma_t*)(&regData);
164
165    retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, &regData);
166    if(retVal != RT_ERR_OK)
167        return retVal;
168
169    pRmacfg->trap_priority = regData;
170
171    return RT_ERR_OK;
172}
173
174/* Function Name:
175 *      rtl8367c_setAsicRmaCsstp
176 * Description:
177 *      Set CSSTP(Cisco Shared Spanning Tree Protocol) for CPU trapping
178 * Input:
179 *      pRmacfg     - type of RMA for trapping frame type setting
180 * Output:
181 *      None
182 * Return:
183 *      RT_ERR_OK         - Success
184 *      RT_ERR_SMI      - SMI access error
185 *      RT_ERR_RMA_ADDR - Invalid RMA address index
186 * Note:
187 *      None
188 */
189ret_t rtl8367c_setAsicRmaCsstp(rtl8367c_rma_t* pRmacfg)
190{
191    rtk_uint32 regData;
192    ret_t retVal;
193
194    if(pRmacfg->operation >= RMAOP_END)
195        return RT_ERR_RMA_ACTION;
196
197    if(pRmacfg->trap_priority > RTL8367C_PRIMAX)
198        return RT_ERR_QOS_INT_PRIORITY;
199
200    regData = *(rtk_uint16*)pRmacfg;
201
202    retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, pRmacfg->trap_priority);
203    if(retVal != RT_ERR_OK)
204        return retVal;
205
206    return rtl8367c_setAsicReg(RTL8367C_REG_RMA_CTRL_CSSTP, regData);
207}
208/* Function Name:
209 *      rtl8367c_getAsicRmaCsstp
210 * Description:
211 *      Get CSSTP(Cisco Shared Spanning Tree Protocol) for CPU trapping
212 * Input:
213 *      None
214 * Output:
215 *      pRmacfg     - type of RMA for trapping frame type setting
216 * Return:
217 *      RT_ERR_OK         - Success
218 *      RT_ERR_SMI      - SMI access error
219 *      RT_ERR_RMA_ADDR - Invalid RMA address index
220 * Note:
221 *      None
222 */
223ret_t rtl8367c_getAsicRmaCsstp(rtl8367c_rma_t* pRmacfg)
224{
225    ret_t retVal;
226    rtk_uint32 regData;
227
228    retVal = rtl8367c_getAsicReg(RTL8367C_REG_RMA_CTRL_CSSTP, &regData);
229    if(retVal != RT_ERR_OK)
230        return retVal;
231
232    *pRmacfg = *(rtl8367c_rma_t*)(&regData);
233
234    retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, &regData);
235    if(retVal != RT_ERR_OK)
236        return retVal;
237
238    pRmacfg->trap_priority = regData;
239
240    return RT_ERR_OK;
241}
242
243/* Function Name:
244 *      rtl8367c_setAsicRmaLldp
245 * Description:
246 *      Set LLDP for CPU trapping
247 * Input:
248 *      pRmacfg     - type of RMA for trapping frame type setting
249 * Output:
250 *      None
251 * Return:
252 *      RT_ERR_OK         - Success
253 *      RT_ERR_SMI      - SMI access error
254 *      RT_ERR_RMA_ADDR - Invalid RMA address index
255 * Note:
256 *      None
257 */
258ret_t rtl8367c_setAsicRmaLldp(rtk_uint32 enabled, rtl8367c_rma_t* pRmacfg)
259{
260    rtk_uint32 regData;
261    ret_t retVal;
262
263    if(enabled > 1)
264        return RT_ERR_ENABLE;
265
266    if(pRmacfg->operation >= RMAOP_END)
267        return RT_ERR_RMA_ACTION;
268
269    if(pRmacfg->trap_priority > RTL8367C_PRIMAX)
270        return RT_ERR_QOS_INT_PRIORITY;
271
272    retVal = rtl8367c_setAsicRegBit(RTL8367C_REG_RMA_LLDP_EN, RTL8367C_RMA_LLDP_EN_OFFSET,enabled);
273    if(retVal != RT_ERR_OK)
274        return retVal;
275
276    regData = *(rtk_uint16*)pRmacfg;
277
278    retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, pRmacfg->trap_priority);
279    if(retVal != RT_ERR_OK)
280        return retVal;
281
282    return rtl8367c_setAsicReg(RTL8367C_REG_RMA_CTRL_LLDP, regData);
283}
284/* Function Name:
285 *      rtl8367c_getAsicRmaLldp
286 * Description:
287 *      Get LLDP for CPU trapping
288 * Input:
289 *      None
290 * Output:
291 *      pRmacfg     - type of RMA for trapping frame type setting
292 * Return:
293 *      RT_ERR_OK         - Success
294 *      RT_ERR_SMI      - SMI access error
295 *      RT_ERR_RMA_ADDR - Invalid RMA address index
296 * Note:
297 *      None
298 */
299ret_t rtl8367c_getAsicRmaLldp(rtk_uint32 *pEnabled, rtl8367c_rma_t* pRmacfg)
300{
301    ret_t retVal;
302    rtk_uint32 regData;
303
304    retVal = rtl8367c_getAsicRegBit(RTL8367C_REG_RMA_LLDP_EN, RTL8367C_RMA_LLDP_EN_OFFSET,pEnabled);
305    if(retVal != RT_ERR_OK)
306        return retVal;
307
308    retVal = rtl8367c_getAsicReg(RTL8367C_REG_RMA_CTRL_LLDP, &regData);
309    if(retVal != RT_ERR_OK)
310        return retVal;
311
312    *pRmacfg = *(rtl8367c_rma_t*)(&regData);
313
314    retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_RMA_CTRL00, RTL8367C_TRAP_PRIORITY_MASK, &regData);
315    if(retVal != RT_ERR_OK)
316        return retVal;
317
318    pRmacfg->trap_priority = regData;
319
320    return RT_ERR_OK;
321}
322
323