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