• 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.36/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 : Miscellaneous functions
17 *
18 */
19
20#include <rtl8367c_asicdrv_misc.h>
21/* Function Name:
22 *      rtl8367c_setAsicMacAddress
23 * Description:
24 *      Set switch MAC address
25 * Input:
26 *      mac 	- switch mac
27 * Output:
28 *      None
29 * Return:
30 *      RT_ERR_OK 		- Success
31 *      RT_ERR_SMI  	- SMI access error
32 * Note:
33 *      None
34 */
35ret_t rtl8367c_setAsicMacAddress(ether_addr_t mac)
36{
37	ret_t retVal;
38	rtk_uint32 regData;
39	rtk_uint8 *accessPtr;
40	rtk_uint32 i;
41
42	accessPtr =  (rtk_uint8*)&mac;
43
44	regData = *accessPtr;
45	accessPtr ++;
46	regData = (regData << 8) | *accessPtr;
47	accessPtr ++;
48	for(i = 0; i <=2; i++)
49	{
50		retVal = rtl8367c_setAsicReg(RTL8367C_REG_SWITCH_MAC2 - i, regData);
51		if(retVal != RT_ERR_OK)
52			return retVal;
53
54		regData = *accessPtr;
55		accessPtr ++;
56		regData = (regData << 8) | *accessPtr;
57		accessPtr ++;
58	}
59
60	return retVal;
61}
62/* Function Name:
63 *      rtl8367c_getAsicMacAddress
64 * Description:
65 *      Get switch MAC address
66 * Input:
67 *      pMac 	- switch mac
68 * Output:
69 *      None
70 * Return:
71 *      RT_ERR_OK 		- Success
72 *      RT_ERR_SMI  	- SMI access error
73 * Note:
74 *      None
75 */
76ret_t rtl8367c_getAsicMacAddress(ether_addr_t *pMac)
77{
78	ret_t retVal;
79	rtk_uint32 regData;
80	rtk_uint8 *accessPtr;
81	rtk_uint32 i;
82
83
84	accessPtr = (rtk_uint8*)pMac;
85
86	for(i = 0; i <= 2; i++)
87	{
88		retVal = rtl8367c_getAsicReg(RTL8367C_REG_SWITCH_MAC2 - i, &regData);
89		if(retVal != RT_ERR_OK)
90			return retVal;
91
92		*accessPtr = (regData & 0xFF00) >> 8;
93		accessPtr ++;
94		*accessPtr = regData & 0xFF;
95		accessPtr ++;
96	}
97
98	return retVal;
99}
100/* Function Name:
101 *      rtl8367c_getAsicDebugInfo
102 * Description:
103 *      Get per-port packet forward debugging information
104 * Input:
105 *      port 		- Physical port number (0~7)
106 *      pDebugifo 	- per-port packet trap/drop/forward reason
107 * Output:
108 *      None
109 * Return:
110 *      RT_ERR_OK 		- Success
111 *      RT_ERR_SMI  	- SMI access error
112 *      RT_ERR_PORT_ID  - Invalid port number
113 * Note:
114 *      None
115 */
116ret_t rtl8367c_getAsicDebugInfo(rtk_uint32 port, rtk_uint32 *pDebugifo)
117{
118    if(port > RTL8367C_PORTIDMAX)
119        return RT_ERR_PORT_ID;
120
121    return rtl8367c_getAsicRegBits(RTL8367C_DEBUG_INFO_REG(port), RTL8367C_DEBUG_INFO_MASK(port), pDebugifo);
122}
123/* Function Name:
124 *      rtl8367c_setAsicPortJamMode
125 * Description:
126 *      Set half duplex flow control setting
127 * Input:
128 *      mode 	- 0: Back-Pressure 1: DEFER
129 * Output:
130 *      None
131 * Return:
132 *      RT_ERR_OK 		- Success
133 *      RT_ERR_SMI  	- SMI access error
134 * Note:
135 *      None
136 */
137ret_t rtl8367c_setAsicPortJamMode(rtk_uint32 mode)
138{
139	return rtl8367c_setAsicRegBit(RTL8367C_REG_CFG_BACKPRESSURE, RTL8367C_LONGTXE_OFFSET,mode);
140}
141/* Function Name:
142 *      rtl8367c_getAsicPortJamMode
143 * Description:
144 *      Get half duplex flow control setting
145 * Input:
146 *      pMode 	- 0: Back-Pressure 1: DEFER
147 * Output:
148 *      None
149 * Return:
150 *      RT_ERR_OK 		- Success
151 *      RT_ERR_SMI  	- SMI access error
152 * Note:
153 *      None
154 */
155ret_t rtl8367c_getAsicPortJamMode(rtk_uint32* pMode)
156{
157	return rtl8367c_getAsicRegBit(RTL8367C_REG_CFG_BACKPRESSURE, RTL8367C_LONGTXE_OFFSET, pMode);
158}
159
160/* Function Name:
161 *      rtl8367c_setAsicMaxLengthCfg
162 * Description:
163 *      Set Max packet length configuration
164 * Input:
165 *      cfgId 	    - Configuration ID
166 *      maxLength   - Max Length
167 * Output:
168 *      None
169 * Return:
170 *      RT_ERR_OK 		- Success
171 *      RT_ERR_SMI  	- SMI access error
172 * Note:
173 *      None
174 */
175ret_t rtl8367c_setAsicMaxLengthCfg(rtk_uint32 cfgId, rtk_uint32 maxLength)
176{
177    return rtl8367c_setAsicRegBits(RTL8367C_REG_MAX_LEN_RX_TX_CFG0 + cfgId, RTL8367C_MAX_LEN_RX_TX_CFG0_MASK, maxLength);
178}
179
180/* Function Name:
181 *      rtl8367c_getAsicMaxLengthCfg
182 * Description:
183 *      Get Max packet length configuration
184 * Input:
185 *      cfgId 	    - Configuration ID
186 *      maxLength   - Max Length
187 * Output:
188 *      None
189 * Return:
190 *      RT_ERR_OK 		- Success
191 *      RT_ERR_SMI  	- SMI access error
192 * Note:
193 *      None
194 */
195ret_t rtl8367c_getAsicMaxLengthCfg(rtk_uint32 cfgId, rtk_uint32 *pMaxLength)
196{
197    return rtl8367c_getAsicRegBits(RTL8367C_REG_MAX_LEN_RX_TX_CFG0 + cfgId, RTL8367C_MAX_LEN_RX_TX_CFG0_MASK, pMaxLength);
198}
199
200/* Function Name:
201 *      rtl8367c_setAsicMaxLength
202 * Description:
203 *      Set Max packet length
204 * Input:
205 *      port        - port ID
206 *      type        - 0: 10M/100M speed, 1: giga speed
207 *      cfgId 	    - Configuration ID
208 * Output:
209 *      None
210 * Return:
211 *      RT_ERR_OK 		- Success
212 *      RT_ERR_SMI  	- SMI access error
213 * Note:
214 *      None
215 */
216ret_t rtl8367c_setAsicMaxLength(rtk_uint32 port, rtk_uint32 type, rtk_uint32 cfgId)
217{
218    ret_t retVal;
219
220    if(port < 8)
221    {
222        retVal = rtl8367c_setAsicRegBit(RTL8367C_REG_MAX_LENGTH_CFG, (type * 8) + port, cfgId);
223        if(retVal != RT_ERR_OK)
224            return retVal;
225    }
226    else
227    {
228        retVal = rtl8367c_setAsicRegBit(RTL8367C_REG_MAX_LENGTH_CFG_EXT, (type * 3) + port - 8, cfgId);
229        if(retVal != RT_ERR_OK)
230            return retVal;
231    }
232
233    return RT_ERR_OK;
234}
235
236/* Function Name:
237 *      rtl8367c_getAsicMaxLength
238 * Description:
239 *      Get Max packet length
240 * Input:
241 *      port        - port ID
242 *      type        - 0: 10M/100M speed, 1: giga speed
243 *      cfgId 	    - Configuration ID
244 * Output:
245 *      None
246 * Return:
247 *      RT_ERR_OK 		- Success
248 *      RT_ERR_SMI  	- SMI access error
249 * Note:
250 *      None
251 */
252ret_t rtl8367c_getAsicMaxLength(rtk_uint32 port, rtk_uint32 type, rtk_uint32 *pCfgId)
253{
254    ret_t retVal;
255
256    if(port < 8)
257    {
258        retVal = rtl8367c_getAsicRegBit(RTL8367C_REG_MAX_LENGTH_CFG, (type * 8) + port, pCfgId);
259        if(retVal != RT_ERR_OK)
260            return retVal;
261    }
262    else
263    {
264        retVal = rtl8367c_getAsicRegBit(RTL8367C_REG_MAX_LENGTH_CFG_EXT, (type * 3) + port - 8, pCfgId);
265        if(retVal != RT_ERR_OK)
266            return retVal;
267    }
268    return RT_ERR_OK;
269}
270
271