1355 lines
41 KiB
C
1355 lines
41 KiB
C
/*
|
|
* Copyright (C) 2013 Realtek Semiconductor Corp.
|
|
* All Rights Reserved.
|
|
*
|
|
* Unless you and Realtek execute a separate written software license
|
|
* agreement governing use of this software, this software is licensed
|
|
* to you under the terms of the GNU General Public License version 2,
|
|
* available at https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
|
|
*
|
|
* $Revision: 76306 $
|
|
* $Date: 2017-03-08 15:13:58 +0800 (週三, 08 三月 2017) $
|
|
*
|
|
* Purpose : RTL8367C switch high-level API for RTL8367C
|
|
* Feature : Flow control related functions
|
|
*
|
|
*/
|
|
|
|
#include <rtl8367c_asicdrv_fc.h>
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlSelect
|
|
* Description:
|
|
* Set system flow control type
|
|
* Input:
|
|
* select - System flow control type 1: Ingress flow control 0:Egress flow control
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlSelect(rtk_uint32 select)
|
|
{
|
|
return rtl8367c_setAsicRegBit(RTL8367C_REG_FLOWCTRL_CTRL0, RTL8367C_FLOWCTRL_TYPE_OFFSET, select);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlSelect
|
|
* Description:
|
|
* Get system flow control type
|
|
* Input:
|
|
* pSelect - System flow control type 1: Ingress flow control 0:Egress flow control
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlSelect(rtk_uint32 *pSelect)
|
|
{
|
|
return rtl8367c_getAsicRegBit(RTL8367C_REG_FLOWCTRL_CTRL0, RTL8367C_FLOWCTRL_TYPE_OFFSET, pSelect);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlJumboMode
|
|
* Description:
|
|
* Set Jumbo threshold for flow control
|
|
* Input:
|
|
* enabled - Jumbo mode flow control 1: Enable 0:Disable
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlJumboMode(rtk_uint32 enabled)
|
|
{
|
|
return rtl8367c_setAsicRegBit(RTL8367C_REG_FLOWCTRL_JUMBO_SIZE, RTL8367C_JUMBO_MODE_OFFSET, enabled);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlJumboMode
|
|
* Description:
|
|
* Get Jumbo threshold for flow control
|
|
* Input:
|
|
* pEnabled - Jumbo mode flow control 1: Enable 0:Disable
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlJumboMode(rtk_uint32* pEnabled)
|
|
{
|
|
return rtl8367c_getAsicRegBit(RTL8367C_REG_FLOWCTRL_JUMBO_SIZE, RTL8367C_JUMBO_MODE_OFFSET, pEnabled);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlJumboModeSize
|
|
* Description:
|
|
* Set Jumbo size for Jumbo mode flow control
|
|
* Input:
|
|
* size - Jumbo size 0:3Kbytes 1:4Kbytes 2:6Kbytes 3:9Kbytes
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlJumboModeSize(rtk_uint32 size)
|
|
{
|
|
if(size >= FC_JUMBO_SIZE_END)
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
return rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SIZE, RTL8367C_JUMBO_SIZE_MASK, size);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlJumboModeSize
|
|
* Description:
|
|
* Get Jumbo size for Jumbo mode flow control
|
|
* Input:
|
|
* pSize - Jumbo size 0:3Kbytes 1:4Kbytes 2:6Kbytes 3:9Kbytes
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlJumboModeSize(rtk_uint32* pSize)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SIZE, RTL8367C_JUMBO_SIZE_MASK, pSize);
|
|
}
|
|
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlQueueEgressEnable
|
|
* Description:
|
|
* Set flow control ability for each queue
|
|
* Input:
|
|
* port - Physical port number (0~7)
|
|
* qid - Queue id
|
|
* enabled - 1: enabled, 0: disabled
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_PORT_ID - Invalid port number
|
|
* RT_ERR_QUEUE_ID - Invalid queue id
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlQueueEgressEnable(rtk_uint32 port, rtk_uint32 qid, rtk_uint32 enabled)
|
|
{
|
|
if(port > RTL8367C_PORTIDMAX)
|
|
return RT_ERR_PORT_ID;
|
|
|
|
if(qid > RTL8367C_QIDMAX)
|
|
return RT_ERR_QUEUE_ID;
|
|
|
|
return rtl8367c_setAsicRegBit(RTL8367C_FLOWCRTL_EGRESS_QUEUE_ENABLE_REG(port), RTL8367C_FLOWCRTL_EGRESS_QUEUE_ENABLE_REG_OFFSET(port)+ qid, enabled);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlQueueEgressEnable
|
|
* Description:
|
|
* Get flow control ability for each queue
|
|
* Input:
|
|
* port - Physical port number (0~7)
|
|
* qid - Queue id
|
|
* pEnabled - 1: enabled, 0: disabled
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_PORT_ID - Invalid port number
|
|
* RT_ERR_QUEUE_ID - Invalid queue id
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlQueueEgressEnable(rtk_uint32 port, rtk_uint32 qid, rtk_uint32* pEnabled)
|
|
{
|
|
if(port > RTL8367C_PORTIDMAX)
|
|
return RT_ERR_PORT_ID;
|
|
|
|
if(qid > RTL8367C_QIDMAX)
|
|
return RT_ERR_QUEUE_ID;
|
|
|
|
return rtl8367c_getAsicRegBit(RTL8367C_FLOWCRTL_EGRESS_QUEUE_ENABLE_REG(port), RTL8367C_FLOWCRTL_EGRESS_QUEUE_ENABLE_REG_OFFSET(port)+ qid, pEnabled);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlDropAll
|
|
* Description:
|
|
* Set system-based drop parameters
|
|
* Input:
|
|
* dropall - Whole system drop threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlDropAll(rtk_uint32 dropall)
|
|
{
|
|
if(dropall >= RTL8367C_PAGE_NUMBER)
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
return rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_CTRL0, RTL8367C_DROP_ALL_THRESHOLD_MASK, dropall);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlDropAll
|
|
* Description:
|
|
* Get system-based drop parameters
|
|
* Input:
|
|
* pDropall - Whole system drop threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlDropAll(rtk_uint32* pDropall)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_CTRL0, RTL8367C_DROP_ALL_THRESHOLD_MASK, pDropall);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlPauseAll
|
|
* Description:
|
|
* Set system-based all ports enable flow control parameters
|
|
* Input:
|
|
* threshold - Whole system pause all threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlPauseAllThreshold(rtk_uint32 threshold)
|
|
{
|
|
if(threshold >= RTL8367C_PAGE_NUMBER)
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
return rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_ALL_ON, RTL8367C_FLOWCTRL_ALL_ON_THRESHOLD_MASK, threshold);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlPauseAllThreshold
|
|
* Description:
|
|
* Get system-based all ports enable flow control parameters
|
|
* Input:
|
|
* pThreshold - Whole system pause all threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlPauseAllThreshold(rtk_uint32 *pThreshold)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_ALL_ON, RTL8367C_FLOWCTRL_ALL_ON_THRESHOLD_MASK, pThreshold);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlSystemThreshold
|
|
* Description:
|
|
* Set system-based flow control parameters
|
|
* Input:
|
|
* onThreshold - Flow control turn ON threshold
|
|
* offThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlSystemThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_SYS_OFF, RTL8367C_FLOWCTRL_SYS_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_SYS_ON, RTL8367C_FLOWCTRL_SYS_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlSystemThreshold
|
|
* Description:
|
|
* Get system-based flow control parameters
|
|
* Input:
|
|
* pOnThreshold - Flow control turn ON threshold
|
|
* pOffThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlSystemThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_SYS_OFF, RTL8367C_FLOWCTRL_SYS_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_SYS_ON, RTL8367C_FLOWCTRL_SYS_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlSharedThreshold
|
|
* Description:
|
|
* Set share-based flow control parameters
|
|
* Input:
|
|
* onThreshold - Flow control turn ON threshold
|
|
* offThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlSharedThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_SHARE_OFF, RTL8367C_FLOWCTRL_SHARE_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_SHARE_ON, RTL8367C_FLOWCTRL_SHARE_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlSharedThreshold
|
|
* Description:
|
|
* Get share-based flow control parameters
|
|
* Input:
|
|
* pOnThreshold - Flow control turn ON threshold
|
|
* pOffThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlSharedThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_SHARE_OFF, RTL8367C_FLOWCTRL_SHARE_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_SHARE_ON, RTL8367C_FLOWCTRL_SHARE_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlPortThreshold
|
|
* Description:
|
|
* Set Port-based flow control parameters
|
|
* Input:
|
|
* onThreshold - Flow control turn ON threshold
|
|
* offThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlPortThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_OFF, RTL8367C_FLOWCTRL_PORT_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_ON, RTL8367C_FLOWCTRL_PORT_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlPortThreshold
|
|
* Description:
|
|
* Get Port-based flow control parameters
|
|
* Input:
|
|
* pOnThreshold - Flow control turn ON threshold
|
|
* pOffThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlPortThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_OFF, RTL8367C_FLOWCTRL_PORT_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_ON, RTL8367C_FLOWCTRL_PORT_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlPortPrivateThreshold
|
|
* Description:
|
|
* Set Port-private-based flow control parameters
|
|
* Input:
|
|
* onThreshold - Flow control turn ON threshold
|
|
* offThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlPortPrivateThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_PRIVATE_OFF, RTL8367C_FLOWCTRL_PORT_PRIVATE_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_PRIVATE_ON, RTL8367C_FLOWCTRL_PORT_PRIVATE_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlPortPrivateThreshold
|
|
* Description:
|
|
* Get Port-private-based flow control parameters
|
|
* Input:
|
|
* pOnThreshold - Flow control turn ON threshold
|
|
* pOffThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlPortPrivateThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_PRIVATE_OFF, RTL8367C_FLOWCTRL_PORT_PRIVATE_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_PRIVATE_ON, RTL8367C_FLOWCTRL_PORT_PRIVATE_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlSystemDropThreshold
|
|
* Description:
|
|
* Set system-based drop parameters
|
|
* Input:
|
|
* onThreshold - Drop turn ON threshold
|
|
* offThreshold - Drop turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlSystemDropThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_SYS_OFF, RTL8367C_FLOWCTRL_FCOFF_SYS_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_SYS_ON, RTL8367C_FLOWCTRL_FCOFF_SYS_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlSystemDropThreshold
|
|
* Description:
|
|
* Get system-based drop parameters
|
|
* Input:
|
|
* pOnThreshold - Drop turn ON threshold
|
|
* pOffThreshold - Drop turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlSystemDropThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_SYS_OFF, RTL8367C_FLOWCTRL_FCOFF_SYS_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_SYS_ON, RTL8367C_FLOWCTRL_FCOFF_SYS_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlSharedDropThreshold
|
|
* Description:
|
|
* Set share-based fdrop parameters
|
|
* Input:
|
|
* onThreshold - Drop turn ON threshold
|
|
* offThreshold - Drop turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlSharedDropThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_SHARE_OFF, RTL8367C_FLOWCTRL_FCOFF_SHARE_OFF_MASK, offThreshold);
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_SHARE_ON, RTL8367C_FLOWCTRL_FCOFF_SHARE_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlSharedDropThreshold
|
|
* Description:
|
|
* Get share-based fdrop parameters
|
|
* Input:
|
|
* pOnThreshold - Drop turn ON threshold
|
|
* pOffThreshold - Drop turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlSharedDropThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_SHARE_OFF, RTL8367C_FLOWCTRL_FCOFF_SHARE_OFF_MASK, pOffThreshold);
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_SHARE_ON, RTL8367C_FLOWCTRL_FCOFF_SHARE_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlPortDropThreshold
|
|
* Description:
|
|
* Set Port-based drop parameters
|
|
* Input:
|
|
* onThreshold - Drop turn ON threshold
|
|
* offThreshold - Drop turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlPortDropThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_PORT_OFF, RTL8367C_FLOWCTRL_FCOFF_PORT_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_PORT_ON, RTL8367C_FLOWCTRL_FCOFF_PORT_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlPortDropThreshold
|
|
* Description:
|
|
* Get Port-based drop parameters
|
|
* Input:
|
|
* pOnThreshold - Drop turn ON threshold
|
|
* pOffThreshold - Drop turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlPortDropThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_PORT_OFF, RTL8367C_FLOWCTRL_FCOFF_PORT_OFF_MASK, pOffThreshold);
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_PORT_ON, RTL8367C_FLOWCTRL_FCOFF_PORT_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlPortPrivateDropThreshold
|
|
* Description:
|
|
* Set Port-private-based drop parameters
|
|
* Input:
|
|
* onThreshold - Drop turn ON threshold
|
|
* offThreshold - Drop turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlPortPrivateDropThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_PORT_PRIVATE_OFF, RTL8367C_FLOWCTRL_FCOFF_PORT_PRIVATE_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_PORT_PRIVATE_ON, RTL8367C_FLOWCTRL_FCOFF_PORT_PRIVATE_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlPortPrivateDropThreshold
|
|
* Description:
|
|
* Get Port-private-based drop parameters
|
|
* Input:
|
|
* pOnThreshold - Drop turn ON threshold
|
|
* pOffThreshold - Drop turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlPortPrivateDropThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_PORT_PRIVATE_OFF, RTL8367C_FLOWCTRL_FCOFF_PORT_PRIVATE_OFF_MASK, pOffThreshold);
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_FCOFF_PORT_PRIVATE_ON, RTL8367C_FLOWCTRL_FCOFF_PORT_PRIVATE_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlSystemJumboThreshold
|
|
* Description:
|
|
* Set Jumbo system-based flow control parameters
|
|
* Input:
|
|
* onThreshold - Flow control turn ON threshold
|
|
* offThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlSystemJumboThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SYS_OFF, RTL8367C_FLOWCTRL_JUMBO_SYS_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SYS_ON, RTL8367C_FLOWCTRL_JUMBO_SYS_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlSystemJumboThreshold
|
|
* Description:
|
|
* Get Jumbo system-based flow control parameters
|
|
* Input:
|
|
* pOnThreshold - Flow control turn ON threshold
|
|
* pOffThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlSystemJumboThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SYS_OFF, RTL8367C_FLOWCTRL_JUMBO_SYS_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SYS_ON, RTL8367C_FLOWCTRL_JUMBO_SYS_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlSharedJumboThreshold
|
|
* Description:
|
|
* Set Jumbo share-based flow control parameters
|
|
* Input:
|
|
* onThreshold - Flow control turn ON threshold
|
|
* offThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlSharedJumboThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SHARE_OFF, RTL8367C_FLOWCTRL_JUMBO_SHARE_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SHARE_ON, RTL8367C_FLOWCTRL_JUMBO_SHARE_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlSharedJumboThreshold
|
|
* Description:
|
|
* Get Jumbo share-based flow control parameters
|
|
* Input:
|
|
* pOnThreshold - Flow control turn ON threshold
|
|
* pOffThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlSharedJumboThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SHARE_OFF, RTL8367C_FLOWCTRL_JUMBO_SHARE_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_SHARE_ON, RTL8367C_FLOWCTRL_JUMBO_SHARE_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlPortJumboThreshold
|
|
* Description:
|
|
* Set Jumbo Port-based flow control parameters
|
|
* Input:
|
|
* onThreshold - Flow control turn ON threshold
|
|
* offThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlPortJumboThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_PORT_OFF, RTL8367C_FLOWCTRL_JUMBO_PORT_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_PORT_ON, RTL8367C_FLOWCTRL_JUMBO_PORT_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlPortJumboThreshold
|
|
* Description:
|
|
* Get Jumbo Port-based flow control parameters
|
|
* Input:
|
|
* pOnThreshold - Flow control turn ON threshold
|
|
* pOffThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlPortJumboThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_PORT_OFF, RTL8367C_FLOWCTRL_JUMBO_PORT_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_PORT_ON, RTL8367C_FLOWCTRL_JUMBO_PORT_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlPortPrivateJumboThreshold
|
|
* Description:
|
|
* Set Jumbo Port-private-based flow control parameters
|
|
* Input:
|
|
* onThreshold - Flow control turn ON threshold
|
|
* offThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlPortPrivateJumboThreshold(rtk_uint32 onThreshold, rtk_uint32 offThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
if((onThreshold >= RTL8367C_PAGE_NUMBER) || (offThreshold >= RTL8367C_PAGE_NUMBER))
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_PORT_PRIVATE_OFF, RTL8367C_FLOWCTRL_JUMBO_PORT_PRIVATE_OFF_MASK, offThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_PORT_PRIVATE_ON, RTL8367C_FLOWCTRL_JUMBO_PORT_PRIVATE_ON_MASK, onThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlPortPrivateJumboThreshold
|
|
* Description:
|
|
* Get Jumbo Port-private-based flow control parameters
|
|
* Input:
|
|
* pOnThreshold - Flow control turn ON threshold
|
|
* pOffThreshold - Flow control turn OFF threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlPortPrivateJumboThreshold(rtk_uint32 *pOnThreshold, rtk_uint32 *pOffThreshold)
|
|
{
|
|
ret_t retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_PORT_PRIVATE_OFF, RTL8367C_FLOWCTRL_JUMBO_PORT_PRIVATE_OFF_MASK, pOffThreshold);
|
|
|
|
if(retVal != RT_ERR_OK)
|
|
return retVal;
|
|
|
|
retVal = rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_JUMBO_PORT_PRIVATE_ON, RTL8367C_FLOWCTRL_JUMBO_PORT_PRIVATE_ON_MASK, pOnThreshold);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
|
|
|
|
/* Function Name:
|
|
* rtl8367c_setAsicEgressFlowControlQueueDropThreshold
|
|
* Description:
|
|
* Set Queue-based egress flow control turn on or ingress flow control drop on threshold
|
|
* Input:
|
|
* qid - The queue id
|
|
* threshold - Queue-based flown control/drop turn ON threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* RT_ERR_QUEUE_ID - Invalid queue id
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicEgressFlowControlQueueDropThreshold(rtk_uint32 qid, rtk_uint32 threshold)
|
|
{
|
|
if( threshold >= RTL8367C_PAGE_NUMBER)
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
if(qid > RTL8367C_QIDMAX)
|
|
return RT_ERR_QUEUE_ID;
|
|
|
|
return rtl8367c_setAsicRegBits(RTL8367C_FLOWCTRL_QUEUE_DROP_ON_REG(qid), RTL8367C_FLOWCTRL_QUEUE_DROP_ON_MASK, threshold);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicEgressFlowControlQueueDropThreshold
|
|
* Description:
|
|
* Get Queue-based egress flow control turn on or ingress flow control drop on threshold
|
|
* Input:
|
|
* qid - The queue id
|
|
* pThreshold - Queue-based flown control/drop turn ON threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_QUEUE_ID - Invalid queue id
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicEgressFlowControlQueueDropThreshold(rtk_uint32 qid, rtk_uint32 *pThreshold)
|
|
{
|
|
if(qid > RTL8367C_QIDMAX)
|
|
return RT_ERR_QUEUE_ID;
|
|
|
|
return rtl8367c_getAsicRegBits(RTL8367C_FLOWCTRL_QUEUE_DROP_ON_REG(qid), RTL8367C_FLOWCTRL_QUEUE_DROP_ON_MASK, pThreshold);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicEgressFlowControlPortDropThreshold
|
|
* Description:
|
|
* Set port-based egress flow control turn on or ingress flow control drop on threshold
|
|
* Input:
|
|
* port - Physical port number (0~7)
|
|
* threshold - Queue-based flown control/drop turn ON threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_PORT_ID - Invalid port number
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicEgressFlowControlPortDropThreshold(rtk_uint32 port, rtk_uint32 threshold)
|
|
{
|
|
if(port > RTL8367C_PORTIDMAX)
|
|
return RT_ERR_PORT_ID;
|
|
|
|
if(threshold >= RTL8367C_PAGE_NUMBER)
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
return rtl8367c_setAsicRegBits(RTL8367C_FLOWCTRL_PORT_DROP_ON_REG(port), RTL8367C_FLOWCTRL_PORT_DROP_ON_MASK, threshold);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicEgressFlowControlPortDropThreshold
|
|
* Description:
|
|
* Set port-based egress flow control turn on or ingress flow control drop on threshold
|
|
* Input:
|
|
* port - Physical port number (0~7)
|
|
* pThreshold - Queue-based flown control/drop turn ON threshold
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_PORT_ID - Invalid port number
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicEgressFlowControlPortDropThreshold(rtk_uint32 port, rtk_uint32 *pThreshold)
|
|
{
|
|
if(port > RTL8367C_PORTIDMAX)
|
|
return RT_ERR_PORT_ID;
|
|
|
|
return rtl8367c_getAsicRegBits(RTL8367C_FLOWCTRL_PORT_DROP_ON_REG(port), RTL8367C_FLOWCTRL_PORT_DROP_ON_MASK, pThreshold);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicEgressFlowControlPortDropGap
|
|
* Description:
|
|
* Set port-based egress flow control turn off or ingress flow control drop off gap
|
|
* Input:
|
|
* gap - Flow control/drop turn OFF threshold = turn ON threshold - gap
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicEgressFlowControlPortDropGap(rtk_uint32 gap)
|
|
{
|
|
if(gap >= RTL8367C_PAGE_NUMBER)
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
return rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_GAP, RTL8367C_FLOWCTRL_PORT_GAP_MASK, gap);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicEgressFlowControlPortDropGap
|
|
* Description:
|
|
* Get port-based egress flow control turn off or ingress flow control drop off gap
|
|
* Input:
|
|
* pGap - Flow control/drop turn OFF threshold = turn ON threshold - gap
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicEgressFlowControlPortDropGap(rtk_uint32 *pGap)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT_GAP, RTL8367C_FLOWCTRL_PORT_GAP_MASK, pGap);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_setAsicEgressFlowControlQueueDropGap
|
|
* Description:
|
|
* Set Queue-based egress flow control turn off or ingress flow control drop off gap
|
|
* Input:
|
|
* gap - Flow control/drop turn OFF threshold = turn ON threshold - gap
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_OUT_OF_RANGE - input parameter out of range
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicEgressFlowControlQueueDropGap(rtk_uint32 gap)
|
|
{
|
|
if(gap >= RTL8367C_PAGE_NUMBER)
|
|
return RT_ERR_OUT_OF_RANGE;
|
|
|
|
return rtl8367c_setAsicRegBits(RTL8367C_REG_FLOWCTRL_QUEUE_GAP, RTL8367C_FLOWCTRL_QUEUE_GAP_MASK, gap);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicEgressFlowControlQueueDropGap
|
|
* Description:
|
|
* Get Queue-based egress flow control turn off or ingress flow control drop off gap
|
|
* Input:
|
|
* pGap - Flow control/drop turn OFF threshold = turn ON threshold - gap
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicEgressFlowControlQueueDropGap(rtk_uint32 *pGap)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_QUEUE_GAP, RTL8367C_FLOWCTRL_QUEUE_GAP_MASK, pGap);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicEgressQueueEmptyPortMask
|
|
* Description:
|
|
* Get queue empty port mask
|
|
* Input:
|
|
* pPortmask - Queue empty port mask
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicEgressQueueEmptyPortMask(rtk_uint32 *pPortmask)
|
|
{
|
|
return rtl8367c_getAsicReg(RTL8367C_REG_PORT_QEMPTY, pPortmask);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicTotalPage
|
|
* Description:
|
|
* Get system total page usage number
|
|
* Input:
|
|
* pPageCount - page usage number
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicTotalPage(rtk_uint32 *pPageCount)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_TOTAL_PAGE_COUNTER, RTL8367C_FLOWCTRL_TOTAL_PAGE_COUNTER_MASK, pPageCount);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicPulbicPage
|
|
* Description:
|
|
* Get system public page usage number
|
|
* Input:
|
|
* pPageCount - page usage number
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicPulbicPage(rtk_uint32 *pPageCount)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PUBLIC_PAGE_COUNTER, RTL8367C_FLOWCTRL_PUBLIC_PAGE_COUNTER_MASK, pPageCount);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicMaxTotalPage
|
|
* Description:
|
|
* Get system total page max usage number
|
|
* Input:
|
|
* pPageCount - page usage number
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicMaxTotalPage(rtk_uint32 *pPageCount)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_TOTAL_PAGE_MAX, RTL8367C_FLOWCTRL_TOTAL_PAGE_MAX_MASK, pPageCount);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicPulbicPage
|
|
* Description:
|
|
* Get system public page max usage number
|
|
* Input:
|
|
* pPageCount - page usage number
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicMaxPulbicPage(rtk_uint32 *pPageCount)
|
|
{
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PUBLIC_PAGE_MAX, RTL8367C_FLOWCTRL_PUBLIC_PAGE_MAX_MASK, pPageCount);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicPortPage
|
|
* Description:
|
|
* Get per-port page usage number
|
|
* Input:
|
|
* port - Physical port number (0~7)
|
|
* pPageCount - page usage number
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_PORT_ID - Invalid port number
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicPortPage(rtk_uint32 port, rtk_uint32 *pPageCount)
|
|
{
|
|
if(port > RTL8367C_PORTIDMAX)
|
|
return RT_ERR_PORT_ID;
|
|
|
|
if(port < 8)
|
|
return rtl8367c_getAsicRegBits(RTL8367C_FLOWCTRL_PORT_PAGE_COUNTER_REG(port), RTL8367C_FLOWCTRL_PORT_PAGE_COUNTER_MASK, pPageCount);
|
|
else
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT8_PAGE_COUNTER+port - 8, RTL8367C_FLOWCTRL_PORT_PAGE_COUNTER_MASK, pPageCount);
|
|
}
|
|
/* Function Name:
|
|
* rtl8367c_getAsicPortPage
|
|
* Description:
|
|
* Get per-port page max usage number
|
|
* Input:
|
|
* port - Physical port number (0~7)
|
|
* pPageCount - page usage number
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_PORT_ID - Invalid port number
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicPortPageMax(rtk_uint32 port, rtk_uint32 *pPageCount)
|
|
{
|
|
if(port > RTL8367C_PORTIDMAX)
|
|
return RT_ERR_PORT_ID;
|
|
if(port < 8)
|
|
return rtl8367c_getAsicRegBits(RTL8367C_FLOWCTRL_PORT_PAGE_MAX_REG(port), RTL8367C_FLOWCTRL_PORT_PAGE_MAX_MASK, pPageCount);
|
|
else
|
|
return rtl8367c_getAsicRegBits(RTL8367C_REG_FLOWCTRL_PORT0_PAGE_MAX+port-8, RTL8367C_FLOWCTRL_PORT_PAGE_MAX_MASK, pPageCount);
|
|
|
|
|
|
}
|
|
|
|
/* Function Name:
|
|
* rtl8367c_setAsicFlowControlEgressPortIndep
|
|
* Description:
|
|
* Set per-port egress flow control independent
|
|
* Input:
|
|
* port - Physical port number (0~7)
|
|
* enabled - Egress port flow control usage 1:enable 0:disable.
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_PORT_ID - Invalid port number
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_setAsicFlowControlEgressPortIndep(rtk_uint32 port, rtk_uint32 enable)
|
|
{
|
|
if(port > RTL8367C_PORTIDMAX)
|
|
return RT_ERR_PORT_ID;
|
|
|
|
return rtl8367c_setAsicRegBit(RTL8367C_REG_PORT0_MISC_CFG + (port *0x20), RTL8367C_PORT0_MISC_CFG_FLOWCTRL_INDEP_OFFSET,enable);
|
|
}
|
|
|
|
/* Function Name:
|
|
* rtl8367c_getAsicFlowControlEgressPortIndep
|
|
* Description:
|
|
* Get per-port egress flow control independent
|
|
* Input:
|
|
* port - Physical port number (0~7)
|
|
* enabled - Egress port flow control usage 1:enable 0:disable.
|
|
* Output:
|
|
* None
|
|
* Return:
|
|
* RT_ERR_OK - Success
|
|
* RT_ERR_SMI - SMI access error
|
|
* RT_ERR_PORT_ID - Invalid port number
|
|
* Note:
|
|
* None
|
|
*/
|
|
ret_t rtl8367c_getAsicFlowControlEgressPortIndep(rtk_uint32 port, rtk_uint32 *pEnable)
|
|
{
|
|
return rtl8367c_getAsicRegBit(RTL8367C_REG_PORT0_MISC_CFG + (port *0x20),RTL8367C_PORT0_MISC_CFG_FLOWCTRL_INDEP_OFFSET,pEnable);
|
|
}
|