2 * Copyright (C) 2013 Realtek Semiconductor Corp.
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
11 * $Date: 2017-03-08 15:13:58 +0800 (週三, 08 三月 2017) $
13 * Purpose : RTL8367C switch high-level API for RTL8367C
14 * Feature : Miscellaneous functions
18 #include <rtl8367c_asicdrv_misc.h>
20 * rtl8367c_setAsicMacAddress
22 * Set switch MAC address
29 * RT_ERR_SMI - SMI access error
33 ret_t
rtl8367c_setAsicMacAddress(ether_addr_t mac
)
40 accessPtr
= (rtk_uint8
*)&mac
;
44 regData
= (regData
<< 8) | *accessPtr
;
46 for(i
= 0; i
<=2; i
++)
48 retVal
= rtl8367c_setAsicReg(RTL8367C_REG_SWITCH_MAC2
- i
, regData
);
49 if(retVal
!= RT_ERR_OK
)
54 regData
= (regData
<< 8) | *accessPtr
;
61 * rtl8367c_getAsicMacAddress
63 * Get switch MAC address
70 * RT_ERR_SMI - SMI access error
74 ret_t
rtl8367c_getAsicMacAddress(ether_addr_t
*pMac
)
82 accessPtr
= (rtk_uint8
*)pMac
;
84 for(i
= 0; i
<= 2; i
++)
86 retVal
= rtl8367c_getAsicReg(RTL8367C_REG_SWITCH_MAC2
- i
, ®Data
);
87 if(retVal
!= RT_ERR_OK
)
90 *accessPtr
= (regData
& 0xFF00) >> 8;
92 *accessPtr
= regData
& 0xFF;
99 * rtl8367c_getAsicDebugInfo
101 * Get per-port packet forward debugging information
103 * port - Physical port number (0~7)
104 * pDebugifo - per-port packet trap/drop/forward reason
108 * RT_ERR_OK - Success
109 * RT_ERR_SMI - SMI access error
110 * RT_ERR_PORT_ID - Invalid port number
114 ret_t
rtl8367c_getAsicDebugInfo(rtk_uint32 port
, rtk_uint32
*pDebugifo
)
116 if(port
> RTL8367C_PORTIDMAX
)
117 return RT_ERR_PORT_ID
;
119 return rtl8367c_getAsicRegBits(RTL8367C_DEBUG_INFO_REG(port
), RTL8367C_DEBUG_INFO_MASK(port
), pDebugifo
);
122 * rtl8367c_setAsicPortJamMode
124 * Set half duplex flow control setting
126 * mode - 0: Back-Pressure 1: DEFER
130 * RT_ERR_OK - Success
131 * RT_ERR_SMI - SMI access error
135 ret_t
rtl8367c_setAsicPortJamMode(rtk_uint32 mode
)
137 return rtl8367c_setAsicRegBit(RTL8367C_REG_CFG_BACKPRESSURE
, RTL8367C_LONGTXE_OFFSET
,mode
);
140 * rtl8367c_getAsicPortJamMode
142 * Get half duplex flow control setting
144 * pMode - 0: Back-Pressure 1: DEFER
148 * RT_ERR_OK - Success
149 * RT_ERR_SMI - SMI access error
153 ret_t
rtl8367c_getAsicPortJamMode(rtk_uint32
* pMode
)
155 return rtl8367c_getAsicRegBit(RTL8367C_REG_CFG_BACKPRESSURE
, RTL8367C_LONGTXE_OFFSET
, pMode
);
159 * rtl8367c_setAsicMaxLengthCfg
161 * Set Max packet length configuration
163 * cfgId - Configuration ID
164 * maxLength - Max Length
168 * RT_ERR_OK - Success
169 * RT_ERR_SMI - SMI access error
173 ret_t
rtl8367c_setAsicMaxLengthCfg(rtk_uint32 cfgId
, rtk_uint32 maxLength
)
175 return rtl8367c_setAsicRegBits(RTL8367C_REG_MAX_LEN_RX_TX_CFG0
+ cfgId
, RTL8367C_MAX_LEN_RX_TX_CFG0_MASK
, maxLength
);
179 * rtl8367c_getAsicMaxLengthCfg
181 * Get Max packet length configuration
183 * cfgId - Configuration ID
184 * maxLength - Max Length
188 * RT_ERR_OK - Success
189 * RT_ERR_SMI - SMI access error
193 ret_t
rtl8367c_getAsicMaxLengthCfg(rtk_uint32 cfgId
, rtk_uint32
*pMaxLength
)
195 return rtl8367c_getAsicRegBits(RTL8367C_REG_MAX_LEN_RX_TX_CFG0
+ cfgId
, RTL8367C_MAX_LEN_RX_TX_CFG0_MASK
, pMaxLength
);
199 * rtl8367c_setAsicMaxLength
201 * Set Max packet length
204 * type - 0: 10M/100M speed, 1: giga speed
205 * cfgId - Configuration ID
209 * RT_ERR_OK - Success
210 * RT_ERR_SMI - SMI access error
214 ret_t
rtl8367c_setAsicMaxLength(rtk_uint32 port
, rtk_uint32 type
, rtk_uint32 cfgId
)
220 retVal
= rtl8367c_setAsicRegBit(RTL8367C_REG_MAX_LENGTH_CFG
, (type
* 8) + port
, cfgId
);
221 if(retVal
!= RT_ERR_OK
)
226 retVal
= rtl8367c_setAsicRegBit(RTL8367C_REG_MAX_LENGTH_CFG_EXT
, (type
* 3) + port
- 8, cfgId
);
227 if(retVal
!= RT_ERR_OK
)
235 * rtl8367c_getAsicMaxLength
237 * Get Max packet length
240 * type - 0: 10M/100M speed, 1: giga speed
241 * cfgId - Configuration ID
245 * RT_ERR_OK - Success
246 * RT_ERR_SMI - SMI access error
250 ret_t
rtl8367c_getAsicMaxLength(rtk_uint32 port
, rtk_uint32 type
, rtk_uint32
*pCfgId
)
256 retVal
= rtl8367c_getAsicRegBit(RTL8367C_REG_MAX_LENGTH_CFG
, (type
* 8) + port
, pCfgId
);
257 if(retVal
!= RT_ERR_OK
)
262 retVal
= rtl8367c_getAsicRegBit(RTL8367C_REG_MAX_LENGTH_CFG_EXT
, (type
* 3) + port
- 8, pCfgId
);
263 if(retVal
!= RT_ERR_OK
)