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 : Port trunking related functions
18 #include <rtl8367c_asicdrv_trunking.h>
20 * rtl8367c_setAsicTrunkingMode
22 * Set port trunking mode
24 * mode - 1:dumb 0:user defined
29 * RT_ERR_SMI - SMI access error
33 ret_t
rtl8367c_setAsicTrunkingMode(rtk_uint32 mode
)
35 return rtl8367c_setAsicRegBit(RTL8367C_REG_PORT_TRUNK_CTRL
, RTL8367C_PORT_TRUNK_DUMB_OFFSET
, mode
);
38 * rtl8367c_getAsicTrunkingMode
40 * Get port trunking mode
42 * pMode - 1:dumb 0:user defined
47 * RT_ERR_SMI - SMI access error
51 ret_t
rtl8367c_getAsicTrunkingMode(rtk_uint32
* pMode
)
53 return rtl8367c_getAsicRegBit(RTL8367C_REG_PORT_TRUNK_CTRL
, RTL8367C_PORT_TRUNK_DUMB_OFFSET
, pMode
);
56 * rtl8367c_setAsicTrunkingFc
58 * Set port trunking flow control
60 * group - Trunk Group ID
61 * enabled - 0:disable, 1:enable
66 * RT_ERR_SMI - SMI access error
70 ret_t
rtl8367c_setAsicTrunkingFc(rtk_uint32 group
, rtk_uint32 enabled
)
74 if(group
> RTL8367C_MAX_TRUNK_GID
)
75 return RT_ERR_LA_TRUNK_ID
;
77 if((retVal
= rtl8367c_setAsicRegBit(RTL8367C_REG_PORT_TRUNK_DROP_CTRL
, RTL8367C_PORT_TRUNK_DROP_CTRL_OFFSET
, ENABLED
)) != RT_ERR_OK
)
80 return rtl8367c_setAsicRegBit(RTL8367C_REG_PORT_TRUNK_FLOWCTRL
, (RTL8367C_EN_FLOWCTRL_TG0_OFFSET
+ group
), enabled
);
83 * rtl8367c_getAsicTrunkingFc
85 * Get port trunking flow control
87 * group - Trunk Group ID
88 * pEnabled - 0:disable, 1:enable
93 * RT_ERR_SMI - SMI access error
97 ret_t
rtl8367c_getAsicTrunkingFc(rtk_uint32 group
, rtk_uint32
* pEnabled
)
99 if(group
> RTL8367C_MAX_TRUNK_GID
)
100 return RT_ERR_LA_TRUNK_ID
;
102 return rtl8367c_getAsicRegBit(RTL8367C_REG_PORT_TRUNK_FLOWCTRL
, (RTL8367C_EN_FLOWCTRL_TG0_OFFSET
+ group
), pEnabled
);
105 * rtl8367c_setAsicTrunkingGroup
107 * Set trunking group available port mask
109 * group - Trunk Group ID
110 * portmask - Logic trunking enable port mask, max 4 ports
114 * RT_ERR_OK - Success
115 * RT_ERR_SMI - SMI access error
119 ret_t
rtl8367c_setAsicTrunkingGroup(rtk_uint32 group
, rtk_uint32 portmask
)
121 if(group
> RTL8367C_MAX_TRUNK_GID
)
122 return RT_ERR_LA_TRUNK_ID
;
123 return rtl8367c_setAsicRegBits(RTL8367C_REG_PORT_TRUNK_GROUP_MASK
, RTL8367C_PORT_TRUNK_GROUP0_MASK_MASK
<< (group
* 4), portmask
);
126 * rtl8367c_getAsicTrunkingGroup
128 * Get trunking group available port mask
130 * group - Trunk Group ID
132 * pPortmask - Logic trunking enable port mask, max 4 ports
134 * RT_ERR_OK - Success
135 * RT_ERR_SMI - SMI access error
139 ret_t
rtl8367c_getAsicTrunkingGroup(rtk_uint32 group
, rtk_uint32
* pPortmask
)
141 if(group
> RTL8367C_MAX_TRUNK_GID
)
142 return RT_ERR_LA_TRUNK_ID
;
144 return rtl8367c_getAsicRegBits(RTL8367C_REG_PORT_TRUNK_GROUP_MASK
, RTL8367C_PORT_TRUNK_GROUP0_MASK_MASK
<< (group
* 4), pPortmask
);
147 * rtl8367c_setAsicTrunkingFlood
149 * Set port trunking flood function
151 * enabled - Port trunking flooding function 0:disable 1:enable
155 * RT_ERR_OK - Success
156 * RT_ERR_SMI - SMI access error
160 ret_t
rtl8367c_setAsicTrunkingFlood(rtk_uint32 enabled
)
162 return rtl8367c_setAsicRegBit(RTL8367C_REG_PORT_TRUNK_CTRL
, RTL8367C_PORT_TRUNK_FLOOD_OFFSET
, enabled
);
165 * rtl8367c_getAsicTrunkingFlood
167 * Get port trunking flood function
169 * pEnabled - Port trunking flooding function 0:disable 1:enable
173 * RT_ERR_OK - Success
174 * RT_ERR_SMI - SMI access error
178 ret_t
rtl8367c_getAsicTrunkingFlood(rtk_uint32
* pEnabled
)
180 return rtl8367c_getAsicRegBit(RTL8367C_REG_PORT_TRUNK_CTRL
, RTL8367C_PORT_TRUNK_FLOOD_OFFSET
, pEnabled
);
183 * rtl8367c_setAsicTrunkingHashSelect
185 * Set port trunking hash select sources
187 * hashsel - hash sources mask
191 * RT_ERR_OK - Success
192 * RT_ERR_SMI - SMI access error
194 * 7 bits mask for link aggregation group0 hash parameter selection {DIP, SIP, DMAC, SMAC, SPA}
200 * 0b0100000: TCP/UDP Source Port
201 * 0b1000000: TCP/UDP Destination Port
203 ret_t
rtl8367c_setAsicTrunkingHashSelect(rtk_uint32 hashsel
)
205 return rtl8367c_setAsicRegBits(RTL8367C_REG_PORT_TRUNK_CTRL
, RTL8367C_PORT_TRUNK_HASH_MASK
, hashsel
);
208 * rtl8367c_getAsicTrunkingHashSelect
210 * Get port trunking hash select sources
212 * pHashsel - hash sources mask
216 * RT_ERR_OK - Success
217 * RT_ERR_SMI - SMI access error
221 ret_t
rtl8367c_getAsicTrunkingHashSelect(rtk_uint32
* pHashsel
)
223 return rtl8367c_getAsicRegBits(RTL8367C_REG_PORT_TRUNK_CTRL
, RTL8367C_PORT_TRUNK_HASH_MASK
, pHashsel
);
226 * rtl8367c_getAsicQeueuEmptyStatus
228 * Get current output queue if empty status
230 * portmask - queue empty port mask
234 * RT_ERR_OK - Success
235 * RT_ERR_SMI - SMI access error
239 ret_t
rtl8367c_getAsicQeueuEmptyStatus(rtk_uint32
* portmask
)
241 return rtl8367c_getAsicReg(RTL8367C_REG_PORT_QEMPTY
, portmask
);
244 * rtl8367c_setAsicTrunkingHashTable
246 * Set port trunking hash value mapping table
248 * hashval - hashing value 0-15
249 * portId - trunking port id 0-3
253 * RT_ERR_OK - Success
254 * RT_ERR_SMI - SMI access error
255 * RT_ERR_PORT_ID - Invalid port number
256 * RT_ERR_OUT_OF_RANGE - Invalid hashing value (0-15)
260 ret_t
rtl8367c_setAsicTrunkingHashTable(rtk_uint32 hashval
, rtk_uint32 portId
)
262 if(hashval
> RTL8367C_TRUNKING_HASHVALUE_MAX
)
263 return RT_ERR_OUT_OF_RANGE
;
265 if(portId
>= RTL8367C_TRUNKING_PORTNO
)
266 return RT_ERR_PORT_ID
;
269 return rtl8367c_setAsicRegBits(RTL8367C_REG_PORT_TRUNK_HASH_MAPPING_CTRL1
, RTL8367C_PORT_TRUNK_HASH_MAPPING_CTRL1_HASH8_MASK
<<((hashval
-8)*2), portId
);
271 return rtl8367c_setAsicRegBits(RTL8367C_REG_PORT_TRUNK_HASH_MAPPING_CTRL0
, RTL8367C_PORT_TRUNK_HASH_MAPPING_CTRL0_HASH0_MASK
<<(hashval
*2), portId
);
274 * rtl8367c_getAsicTrunkingHashTable
276 * Get port trunking hash value mapping table
278 * hashval - hashing value 0-15
279 * pPortId - trunking port id 0-3
283 * RT_ERR_OK - Success
284 * RT_ERR_SMI - SMI access error
285 * RT_ERR_OUT_OF_RANGE - Invalid hashing value (0-15)
289 ret_t
rtl8367c_getAsicTrunkingHashTable(rtk_uint32 hashval
, rtk_uint32
* pPortId
)
291 if(hashval
> RTL8367C_TRUNKING_HASHVALUE_MAX
)
292 return RT_ERR_OUT_OF_RANGE
;
295 return rtl8367c_getAsicRegBits(RTL8367C_REG_PORT_TRUNK_HASH_MAPPING_CTRL1
, RTL8367C_PORT_TRUNK_HASH_MAPPING_CTRL1_HASH8_MASK
<<((hashval
-8)*2), pPortId
);
297 return rtl8367c_getAsicRegBits(RTL8367C_REG_PORT_TRUNK_HASH_MAPPING_CTRL0
, RTL8367C_PORT_TRUNK_HASH_MAPPING_CTRL0_HASH0_MASK
<<(hashval
*2), pPortId
);
301 * rtl8367c_setAsicTrunkingHashTable1
303 * Set port trunking hash value mapping table
305 * hashval - hashing value 0-15
306 * portId - trunking port id 0-3
310 * RT_ERR_OK - Success
311 * RT_ERR_SMI - SMI access error
312 * RT_ERR_PORT_ID - Invalid port number
313 * RT_ERR_OUT_OF_RANGE - Invalid hashing value (0-15)
317 ret_t
rtl8367c_setAsicTrunkingHashTable1(rtk_uint32 hashval
, rtk_uint32 portId
)
319 if(hashval
> RTL8367C_TRUNKING_HASHVALUE_MAX
)
320 return RT_ERR_OUT_OF_RANGE
;
322 if(portId
>= RTL8367C_TRUNKING1_PORTN0
)
323 return RT_ERR_PORT_ID
;
326 return rtl8367c_setAsicRegBits(RTL8367C_REG_PORT_TRUNK_HASH_MAPPING_CTRL3
, RTL8367C_PORT_TRUNK_HASH_MAPPING_CTRL3_HASH8_MASK
<<((hashval
-8)*2), portId
);
328 return rtl8367c_setAsicRegBits(RTL8367C_REG_PORT_TRUNK_HASH_MAPPING_CTRL2
, RTL8367C_PORT_TRUNK_HASH_MAPPING_CTRL2_HASH0_MASK
<<(hashval
*2), portId
);
331 * rtl8367c_getAsicTrunkingHashTable1
333 * Get port trunking hash value mapping table
335 * hashval - hashing value 0-15
336 * pPortId - trunking port id 0-3
340 * RT_ERR_OK - Success
341 * RT_ERR_SMI - SMI access error
342 * RT_ERR_OUT_OF_RANGE - Invalid hashing value (0-15)
346 ret_t
rtl8367c_getAsicTrunkingHashTable1(rtk_uint32 hashval
, rtk_uint32
* pPortId
)
348 if(hashval
> RTL8367C_TRUNKING_HASHVALUE_MAX
)
349 return RT_ERR_OUT_OF_RANGE
;
352 return rtl8367c_getAsicRegBits(RTL8367C_REG_PORT_TRUNK_HASH_MAPPING_CTRL3
, RTL8367C_PORT_TRUNK_HASH_MAPPING_CTRL3_HASH8_MASK
<<((hashval
-8)*2), pPortId
);
354 return rtl8367c_getAsicRegBits(RTL8367C_REG_PORT_TRUNK_HASH_MAPPING_CTRL2
, RTL8367C_PORT_TRUNK_HASH_MAPPING_CTRL2_HASH0_MASK
<<(hashval
*2), pPortId
);