mediatek: mt7622: add Linux 5.10 support
[openwrt/openwrt.git] / target / linux / mediatek / files-5.10 / drivers / net / phy / rtk / rtl8367c / include / rtk_switch.h
diff --git a/target/linux/mediatek/files-5.10/drivers/net/phy/rtk/rtl8367c/include/rtk_switch.h b/target/linux/mediatek/files-5.10/drivers/net/phy/rtk/rtl8367c/include/rtk_switch.h
new file mode 100644 (file)
index 0000000..b0ca136
--- /dev/null
@@ -0,0 +1,737 @@
+/*
+ * 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: 76336 $
+ * $Date: 2017-03-09 10:41:21 +0800 (ι€±ε››, 09 δΈ‰ζœˆ 2017) $
+ *
+ * Purpose : RTK switch high-level API
+ * Feature : Here is a list of all functions and variables in this module.
+ *
+ */
+
+#ifndef __RTK_SWITCH_H__
+#define __RTK_SWITCH_H__
+
+#include <rtk_types.h>
+
+#define UNDEFINE_PHY_PORT   (0xFF)
+#define RTK_SWITCH_PORT_NUM (32)
+
+#define MAXPKTLEN_CFG_ID_MAX (1)
+
+#define RTK_SWITCH_MAX_PKTLEN (0x3FFF)
+
+typedef enum init_state_e
+{
+    INIT_NOT_COMPLETED = 0,
+    INIT_COMPLETED,
+    INIT_STATE_END
+} init_state_t;
+
+typedef enum switch_chip_e
+{
+    CHIP_RTL8367C = 0,
+    CHIP_RTL8370B,
+    CHIP_RTL8364B,
+    CHIP_RTL8363SC_VB,
+    CHIP_END
+}switch_chip_t;
+
+typedef enum port_type_e
+{
+    UTP_PORT = 0,
+    EXT_PORT,
+    UNKNOWN_PORT = 0xFF,
+    PORT_TYPE_END
+}port_type_t;
+
+typedef struct rtk_switch_halCtrl_s
+{
+    switch_chip_t   switch_type;
+    rtk_uint32      l2p_port[RTK_SWITCH_PORT_NUM];
+    rtk_uint32      p2l_port[RTK_SWITCH_PORT_NUM];
+    port_type_t     log_port_type[RTK_SWITCH_PORT_NUM];
+    rtk_uint32      ptp_port[RTK_SWITCH_PORT_NUM];
+    rtk_uint32      valid_portmask;
+    rtk_uint32      valid_utp_portmask;
+    rtk_uint32      valid_ext_portmask;
+    rtk_uint32      valid_cpu_portmask;
+    rtk_uint32      min_phy_port;
+    rtk_uint32      max_phy_port;
+    rtk_uint32      phy_portmask;
+    rtk_uint32      combo_logical_port;
+    rtk_uint32      hsg_logical_port;
+    rtk_uint32      sg_logical_portmask;
+    rtk_uint32      max_meter_id;
+    rtk_uint32      max_lut_addr_num;
+    rtk_uint32      trunk_group_mask;
+
+}rtk_switch_halCtrl_t;
+
+typedef enum rtk_switch_maxPktLen_linkSpeed_e {
+     MAXPKTLEN_LINK_SPEED_FE = 0,
+     MAXPKTLEN_LINK_SPEED_GE,
+     MAXPKTLEN_LINK_SPEED_END,
+} rtk_switch_maxPktLen_linkSpeed_t;
+
+
+/* UTIL MACRO */
+#define RTK_CHK_INIT_STATE()                                \
+    do                                                      \
+    {                                                       \
+        if(rtk_switch_initialState_get() != INIT_COMPLETED) \
+        {                                                   \
+            return RT_ERR_NOT_INIT;                         \
+        }                                                   \
+    }while(0)
+
+#define RTK_CHK_PORT_VALID(__port__)                            \
+    do                                                          \
+    {                                                           \
+        if(rtk_switch_logicalPortCheck(__port__) != RT_ERR_OK)  \
+        {                                                       \
+            return RT_ERR_PORT_ID;                              \
+        }                                                       \
+    }while(0)
+
+#define RTK_CHK_PORT_IS_UTP(__port__)                           \
+    do                                                          \
+    {                                                           \
+        if(rtk_switch_isUtpPort(__port__) != RT_ERR_OK)         \
+        {                                                       \
+            return RT_ERR_PORT_ID;                              \
+        }                                                       \
+    }while(0)
+
+#define RTK_CHK_PORT_IS_EXT(__port__)                           \
+    do                                                          \
+    {                                                           \
+        if(rtk_switch_isExtPort(__port__) != RT_ERR_OK)         \
+        {                                                       \
+            return RT_ERR_PORT_ID;                              \
+        }                                                       \
+    }while(0)
+
+#define RTK_CHK_PORT_IS_COMBO(__port__)                         \
+    do                                                          \
+    {                                                           \
+        if(rtk_switch_isComboPort(__port__) != RT_ERR_OK)       \
+        {                                                       \
+            return RT_ERR_PORT_ID;                              \
+        }                                                       \
+    }while(0)
+
+#define RTK_CHK_PORT_IS_PTP(__port__)                           \
+    do                                                          \
+    {                                                           \
+        if(rtk_switch_isPtpPort(__port__) != RT_ERR_OK)         \
+        {                                                       \
+            return RT_ERR_PORT_ID;                              \
+        }                                                       \
+    }while(0)
+
+#define RTK_CHK_PORTMASK_VALID(__portmask__)                        \
+    do                                                              \
+    {                                                               \
+        if(rtk_switch_isPortMaskValid(__portmask__) != RT_ERR_OK)   \
+        {                                                           \
+            return RT_ERR_PORT_MASK;                                \
+        }                                                           \
+    }while(0)
+
+#define RTK_CHK_PORTMASK_VALID_ONLY_UTP(__portmask__)               \
+    do                                                              \
+    {                                                               \
+        if(rtk_switch_isPortMaskUtp(__portmask__) != RT_ERR_OK)     \
+        {                                                           \
+            return RT_ERR_PORT_MASK;                                \
+        }                                                           \
+    }while(0)
+
+#define RTK_CHK_PORTMASK_VALID_ONLY_EXT(__portmask__)               \
+    do                                                              \
+    {                                                               \
+        if(rtk_switch_isPortMaskExt(__portmask__) != RT_ERR_OK)     \
+        {                                                           \
+            return RT_ERR_PORT_MASK;                                \
+        }                                                           \
+    }while(0)
+
+#define RTK_CHK_TRUNK_GROUP_VALID(__grpId__)                        \
+    do                                                              \
+    {                                                               \
+        if(rtk_switch_isValidTrunkGrpId(__grpId__) != RT_ERR_OK)    \
+        {                                                           \
+            return RT_ERR_LA_TRUNK_ID;                              \
+        }                                                           \
+    }while(0)
+
+#define RTK_PORTMASK_IS_PORT_SET(__portmask__, __port__)    (((__portmask__).bits[0] & (0x00000001 << __port__)) ? 1 : 0)
+#define RTK_PORTMASK_IS_EMPTY(__portmask__)                 (((__portmask__).bits[0] == 0) ? 1 : 0)
+#define RTK_PORTMASK_CLEAR(__portmask__)                    ((__portmask__).bits[0] = 0)
+#define RTK_PORTMASK_PORT_SET(__portmask__, __port__)       ((__portmask__).bits[0] |= (0x00000001 << __port__))
+#define RTK_PORTMASK_PORT_CLEAR(__portmask__, __port__)     ((__portmask__).bits[0] &= ~(0x00000001 << __port__))
+#define RTK_PORTMASK_ALLPORT_SET(__portmask__)              (rtk_switch_logPortMask_get(&__portmask__))
+#define RTK_PORTMASK_SCAN(__portmask__, __port__)           for(__port__ = 0; __port__ < RTK_SWITCH_PORT_NUM; __port__++)  if(RTK_PORTMASK_IS_PORT_SET(__portmask__, __port__))
+#define RTK_PORTMASK_COMPARE(__portmask_A__, __portmask_B__)    ((__portmask_A__).bits[0] - (__portmask_B__).bits[0])
+
+#define RTK_SCAN_ALL_PHY_PORTMASK(__port__)                 for(__port__ = 0; __port__ < RTK_SWITCH_PORT_NUM; __port__++)  if( (rtk_switch_phyPortMask_get() & (0x00000001 << __port__)))
+#define RTK_SCAN_ALL_LOG_PORT(__port__)                     for(__port__ = 0; __port__ < RTK_SWITCH_PORT_NUM; __port__++)  if( rtk_switch_logicalPortCheck(__port__) == RT_ERR_OK)
+#define RTK_SCAN_ALL_LOG_PORTMASK(__portmask__)             for((__portmask__).bits[0] = 0; (__portmask__).bits[0] < 0x7FFFF; (__portmask__).bits[0]++)  if( rtk_switch_isPortMaskValid(&__portmask__) == RT_ERR_OK)
+
+/* Port mask defination */
+#define RTK_PHY_PORTMASK_ALL                                (rtk_switch_phyPortMask_get())
+
+/* Port defination*/
+#define RTK_MAX_LOGICAL_PORT_ID                             (rtk_switch_maxLogicalPort_get())
+
+/* Function Name:
+ *      rtk_switch_probe
+ * Description:
+ *      Probe switch
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Switch probed
+ *      RT_ERR_FAILED   - Switch Unprobed.
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_probe(switch_chip_t *pSwitchChip);
+
+/* Function Name:
+ *      rtk_switch_initialState_set
+ * Description:
+ *      Set initial status
+ * Input:
+ *      state   - Initial state;
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Initialized
+ *      RT_ERR_FAILED   - Uninitialized
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_initialState_set(init_state_t state);
+
+/* Function Name:
+ *      rtk_switch_initialState_get
+ * Description:
+ *      Get initial status
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      INIT_COMPLETED     - Initialized
+ *      INIT_NOT_COMPLETED - Uninitialized
+ * Note:
+ *
+ */
+extern init_state_t rtk_switch_initialState_get(void);
+
+/* Function Name:
+ *      rtk_switch_logicalPortCheck
+ * Description:
+ *      Check logical port ID.
+ * Input:
+ *      logicalPort     - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Port ID is correct
+ *      RT_ERR_FAILED   - Port ID is not correct
+ *      RT_ERR_NOT_INIT - Not Initialize
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_logicalPortCheck(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_isUtpPort
+ * Description:
+ *      Check is logical port a UTP port
+ * Input:
+ *      logicalPort     - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Port ID is a UTP port
+ *      RT_ERR_FAILED   - Port ID is not a UTP port
+ *      RT_ERR_NOT_INIT - Not Initialize
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isUtpPort(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_isExtPort
+ * Description:
+ *      Check is logical port a Extension port
+ * Input:
+ *      logicalPort     - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Port ID is a EXT port
+ *      RT_ERR_FAILED   - Port ID is not a EXT port
+ *      RT_ERR_NOT_INIT - Not Initialize
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isExtPort(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_isHsgPort
+ * Description:
+ *      Check is logical port a HSG port
+ * Input:
+ *      logicalPort     - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Port ID is a HSG port
+ *      RT_ERR_FAILED   - Port ID is not a HSG port
+ *      RT_ERR_NOT_INIT - Not Initialize
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isHsgPort(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_isSgmiiPort
+ * Description:
+ *      Check is logical port a SGMII port
+ * Input:
+ *      logicalPort     - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Port ID is a SGMII port
+ *      RT_ERR_FAILED   - Port ID is not a SGMII port
+ *      RT_ERR_NOT_INIT - Not Initialize
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isSgmiiPort(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_isCPUPort
+ * Description:
+ *      Check is logical port a CPU port
+ * Input:
+ *      logicalPort     - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Port ID is a CPU port
+ *      RT_ERR_FAILED   - Port ID is not a CPU port
+ *      RT_ERR_NOT_INIT - Not Initialize
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isCPUPort(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_isComboPort
+ * Description:
+ *      Check is logical port a Combo port
+ * Input:
+ *      logicalPort     - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Port ID is a combo port
+ *      RT_ERR_FAILED   - Port ID is not a combo port
+ *      RT_ERR_NOT_INIT - Not Initialize
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isComboPort(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_ComboPort_get
+ * Description:
+ *      Get Combo port ID
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      Port ID of combo port
+ * Note:
+ *
+ */
+extern rtk_uint32 rtk_switch_ComboPort_get(void);
+
+/* Function Name:
+ *      rtk_switch_isPtpPort
+ * Description:
+ *      Check is logical port a PTP port
+ * Input:
+ *      logicalPort     - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - Port ID is a PTP port
+ *      RT_ERR_FAILED   - Port ID is not a PTP port
+ *      RT_ERR_NOT_INIT - Not Initialize
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isPtpPort(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_port_L2P_get
+ * Description:
+ *      Get physical port ID
+ * Input:
+ *      logicalPort       - logical port ID
+ * Output:
+ *      None
+ * Return:
+ *      Physical port ID
+ * Note:
+ *
+ */
+extern rtk_uint32 rtk_switch_port_L2P_get(rtk_port_t logicalPort);
+
+/* Function Name:
+ *      rtk_switch_port_P2L_get
+ * Description:
+ *      Get logical port ID
+ * Input:
+ *      physicalPort       - physical port ID
+ * Output:
+ *      None
+ * Return:
+ *      logical port ID
+ * Note:
+ *
+ */
+extern rtk_port_t rtk_switch_port_P2L_get(rtk_uint32 physicalPort);
+
+/* Function Name:
+ *      rtk_switch_isPortMaskValid
+ * Description:
+ *      Check portmask is valid or not
+ * Input:
+ *      pPmask       - logical port mask
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK           - port mask is valid
+ *      RT_ERR_FAILED       - port mask is not valid
+ *      RT_ERR_NOT_INIT     - Not Initialize
+ *      RT_ERR_NULL_POINTER - Null pointer
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isPortMaskValid(rtk_portmask_t *pPmask);
+
+/* Function Name:
+ *      rtk_switch_isPortMaskUtp
+ * Description:
+ *      Check all ports in portmask are only UTP port
+ * Input:
+ *      pPmask       - logical port mask
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK           - Only UTP port in port mask
+ *      RT_ERR_FAILED       - Not only UTP port in port mask
+ *      RT_ERR_NOT_INIT     - Not Initialize
+ *      RT_ERR_NULL_POINTER - Null pointer
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isPortMaskUtp(rtk_portmask_t *pPmask);
+
+/* Function Name:
+ *      rtk_switch_isPortMaskExt
+ * Description:
+ *      Check all ports in portmask are only EXT port
+ * Input:
+ *      pPmask       - logical port mask
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK           - Only EXT port in port mask
+ *      RT_ERR_FAILED       - Not only EXT port in port mask
+ *      RT_ERR_NOT_INIT     - Not Initialize
+ *      RT_ERR_NULL_POINTER - Null pointer
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_isPortMaskExt(rtk_portmask_t *pPmask);
+
+/* Function Name:
+ *      rtk_switch_portmask_L2P_get
+ * Description:
+ *      Get physicl portmask from logical portmask
+ * Input:
+ *      pLogicalPmask       - logical port mask
+ * Output:
+ *      pPhysicalPortmask   - physical port mask
+ * Return:
+ *      RT_ERR_OK           - OK
+ *      RT_ERR_NOT_INIT     - Not Initialize
+ *      RT_ERR_NULL_POINTER - Null pointer
+ *      RT_ERR_PORT_MASK    - Error port mask
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_portmask_L2P_get(rtk_portmask_t *pLogicalPmask, rtk_uint32 *pPhysicalPortmask);
+
+/* Function Name:
+ *      rtk_switch_portmask_P2L_get
+ * Description:
+ *      Get logical portmask from physical portmask
+ * Input:
+ *      physicalPortmask    - physical port mask
+ * Output:
+ *      pLogicalPmask       - logical port mask
+ * Return:
+ *      RT_ERR_OK           - OK
+ *      RT_ERR_NOT_INIT     - Not Initialize
+ *      RT_ERR_NULL_POINTER - Null pointer
+ *      RT_ERR_PORT_MASK    - Error port mask
+ * Note:
+ *
+ */
+extern rtk_api_ret_t rtk_switch_portmask_P2L_get(rtk_uint32 physicalPortmask, rtk_portmask_t *pLogicalPmask);
+
+/* Function Name:
+ *      rtk_switch_phyPortMask_get
+ * Description:
+ *      Get physical portmask
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      0x00                - Not Initialize
+ *      Other value         - Physical port mask
+ * Note:
+ *
+ */
+rtk_uint32 rtk_switch_phyPortMask_get(void);
+
+/* Function Name:
+ *      rtk_switch_logPortMask_get
+ * Description:
+ *      Get Logical portmask
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK           - OK
+ *      RT_ERR_NOT_INIT     - Not Initialize
+ *      RT_ERR_NULL_POINTER - Null pointer
+ * Note:
+ *
+ */
+rtk_api_ret_t rtk_switch_logPortMask_get(rtk_portmask_t *pPortmask);
+
+/* Function Name:
+ *      rtk_switch_init
+ * Description:
+ *      Set chip to default configuration enviroment
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK           - OK
+ *      RT_ERR_FAILED       - Failed
+ *      RT_ERR_SMI          - SMI access error
+ * Note:
+ *      The API can set chip registers to default configuration for different release chip model.
+ */
+extern rtk_api_ret_t rtk_switch_init(void);
+
+/* Function Name:
+ *      rtk_switch_portMaxPktLen_set
+ * Description:
+ *      Set Max packet length
+ * Input:
+ *      port    - Port ID
+ *      speed   - Speed
+ *      cfgId   - Configuration ID
+ * Output:
+ *      None.
+ * Return:
+ *      RT_ERR_OK           - OK
+ *      RT_ERR_FAILED       - Failed
+ *      RT_ERR_SMI          - SMI access error
+ *      RT_ERR_INPUT        - Error Input
+ * Note:
+ */
+extern rtk_api_ret_t rtk_switch_portMaxPktLen_set(rtk_port_t port, rtk_switch_maxPktLen_linkSpeed_t speed, rtk_uint32 cfgId);
+
+/* Function Name:
+ *      rtk_switch_portMaxPktLen_get
+ * Description:
+ *      Get Max packet length
+ * Input:
+ *      port    - Port ID
+ *      speed   - Speed
+ * Output:
+ *      pCfgId  - Configuration ID
+ * Return:
+ *      RT_ERR_OK           - OK
+ *      RT_ERR_FAILED       - Failed
+ *      RT_ERR_SMI          - SMI access error
+ *      RT_ERR_INPUT        - Error Input
+ * Note:
+ */
+extern rtk_api_ret_t rtk_switch_portMaxPktLen_get(rtk_port_t port, rtk_switch_maxPktLen_linkSpeed_t speed, rtk_uint32 *pCfgId);
+
+/* Function Name:
+ *      rtk_switch_maxPktLenCfg_set
+ * Description:
+ *      Set Max packet length configuration
+ * Input:
+ *      cfgId   - Configuration ID
+ *      pktLen  - Max packet length
+ * Output:
+ *      None.
+ * Return:
+ *      RT_ERR_OK           - OK
+ *      RT_ERR_FAILED       - Failed
+ *      RT_ERR_SMI          - SMI access error
+ *      RT_ERR_INPUT        - Error Input
+ * Note:
+ */
+extern rtk_api_ret_t rtk_switch_maxPktLenCfg_set(rtk_uint32 cfgId, rtk_uint32 pktLen);
+
+/* Function Name:
+ *      rtk_switch_maxPktLenCfg_get
+ * Description:
+ *      Get Max packet length configuration
+ * Input:
+ *      cfgId   - Configuration ID
+ *      pPktLen - Max packet length
+ * Output:
+ *      None.
+ * Return:
+ *      RT_ERR_OK           - OK
+ *      RT_ERR_FAILED       - Failed
+ *      RT_ERR_SMI          - SMI access error
+ *      RT_ERR_INPUT        - Error Input
+ * Note:
+ */
+extern rtk_api_ret_t rtk_switch_maxPktLenCfg_get(rtk_uint32 cfgId, rtk_uint32 *pPktLen);
+
+/* Function Name:
+ *      rtk_switch_greenEthernet_set
+ * Description:
+ *      Set all Ports Green Ethernet state.
+ * Input:
+ *      enable - Green Ethernet state.
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK       - OK
+ *      RT_ERR_FAILED   - Failed
+ *      RT_ERR_SMI      - SMI access error
+ *      RT_ERR_ENABLE   - Invalid enable input.
+ * Note:
+ *      This API can set all Ports Green Ethernet state.
+ *      The configuration is as following:
+ *      - DISABLE
+ *      - ENABLE
+ */
+extern rtk_api_ret_t rtk_switch_greenEthernet_set(rtk_enable_t enable);
+
+/* Function Name:
+ *      rtk_switch_greenEthernet_get
+ * Description:
+ *      Get all Ports Green Ethernet state.
+ * Input:
+ *      None
+ * Output:
+ *      pEnable - Green Ethernet state.
+ * Return:
+ *      RT_ERR_OK              - OK
+ *      RT_ERR_FAILED          - Failed
+ *      RT_ERR_SMI             - SMI access error
+ * Note:
+ *      This API can get Green Ethernet state.
+ */
+extern rtk_api_ret_t rtk_switch_greenEthernet_get(rtk_enable_t *pEnable);
+
+/* Function Name:
+ *      rtk_switch_maxLogicalPort_get
+ * Description:
+ *      Get Max logical port ID
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      Max logical port
+ * Note:
+ *      This API can get max logical port
+ */
+extern rtk_port_t rtk_switch_maxLogicalPort_get(void);
+
+/* Function Name:
+ *      rtk_switch_maxMeterId_get
+ * Description:
+ *      Get Max Meter ID
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      0x00                - Not Initialize
+ *      Other value         - Max Meter ID
+ * Note:
+ *
+ */
+extern rtk_uint32 rtk_switch_maxMeterId_get(void);
+
+/* Function Name:
+ *      rtk_switch_maxLutAddrNumber_get
+ * Description:
+ *      Get Max LUT Address number
+ * Input:
+ *      None
+ * Output:
+ *      None
+ * Return:
+ *      0x00                - Not Initialize
+ *      Other value         - Max LUT Address number
+ * Note:
+ *
+ */
+extern rtk_uint32 rtk_switch_maxLutAddrNumber_get(void);
+
+/* Function Name:
+ *      rtk_switch_isValidTrunkGrpId
+ * Description:
+ *      Check if trunk group is valid or not
+ * Input:
+ *      grpId       - Group ID
+ * Output:
+ *      None
+ * Return:
+ *      RT_ERR_OK           - Trunk Group ID is valid
+ *      RT_ERR_LA_TRUNK_ID  - Trunk Group ID is not valid
+ * Note:
+ *
+ */
+rtk_uint32 rtk_switch_isValidTrunkGrpId(rtk_uint32 grpId);
+
+#endif