/* * 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 : RTK switch high-level API for RTL8367/RTL8367C * Feature : Here is a list of all functions and variables in CPU module. * */ #include #include #include #include #include #include /* Function Name: * rtk_cpu_enable_set * Description: * Set CPU port function enable/disable. * Input: * enable - CPU port function enable * Output: * None * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input parameter. * RT_ERR_PORT_ID - Invalid port number. * Note: * The API can set CPU port function enable/disable. */ rtk_api_ret_t rtk_cpu_enable_set(rtk_enable_t enable) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if (enable >= RTK_ENABLE_END) return RT_ERR_ENABLE; if ((retVal = rtl8367c_setAsicCputagEnable(enable)) != RT_ERR_OK) return retVal; if (DISABLED == enable) { if ((retVal = rtl8367c_setAsicCputagPortmask(0)) != RT_ERR_OK) return retVal; } return RT_ERR_OK; } /* Function Name: * rtk_cpu_enable_get * Description: * Get CPU port and its setting. * Input: * None * Output: * pEnable - CPU port function enable * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input parameters. * RT_ERR_L2_NO_CPU_PORT - CPU port is not exist * Note: * The API can get CPU port function enable/disable. */ rtk_api_ret_t rtk_cpu_enable_get(rtk_enable_t *pEnable) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if(NULL == pEnable) return RT_ERR_NULL_POINTER; if ((retVal = rtl8367c_getAsicCputagEnable(pEnable)) != RT_ERR_OK) return retVal; return RT_ERR_OK; } /* Function Name: * rtk_cpu_tagPort_set * Description: * Set CPU port and CPU tag insert mode. * Input: * port - Port id. * mode - CPU tag insert for packets egress from CPU port. * Output: * None * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input parameter. * RT_ERR_PORT_ID - Invalid port number. * Note: * The API can set CPU port and inserting proprietary CPU tag mode (Length/Type 0x8899) * to the frame that transmitting to CPU port. * The inset cpu tag mode is as following: * - CPU_INSERT_TO_ALL * - CPU_INSERT_TO_TRAPPING * - CPU_INSERT_TO_NONE */ rtk_api_ret_t rtk_cpu_tagPort_set(rtk_port_t port, rtk_cpu_insert_t mode) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); /* Check port Valid */ RTK_CHK_PORT_VALID(port); if (mode >= CPU_INSERT_END) return RT_ERR_INPUT; if ((retVal = rtl8367c_setAsicCputagPortmask(1<= CPU_POS_END) return RT_ERR_INPUT; if ((retVal = rtl8367c_setAsicCputagPosition(position)) != RT_ERR_OK) return retVal; return RT_ERR_OK; } /* Function Name: * rtk_cpu_tagPosition_get * Description: * Get CPU tag position. * Input: * None * Output: * pPosition - CPU tag position. * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input. * Note: * The API can get CPU tag position. */ rtk_api_ret_t rtk_cpu_tagPosition_get(rtk_cpu_position_t *pPosition) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if(NULL == pPosition) return RT_ERR_NULL_POINTER; if ((retVal = rtl8367c_getAsicCputagPosition(pPosition)) != RT_ERR_OK) return retVal; return RT_ERR_OK; } /* Function Name: * rtk_cpu_tagLength_set * Description: * Set CPU tag length. * Input: * length - CPU tag length. * Output: * None * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input. * Note: * The API can set CPU tag length. */ rtk_api_ret_t rtk_cpu_tagLength_set(rtk_cpu_tag_length_t length) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if (length >= CPU_LEN_END) return RT_ERR_INPUT; if ((retVal = rtl8367c_setAsicCputagMode(length)) != RT_ERR_OK) return retVal; return RT_ERR_OK; } /* Function Name: * rtk_cpu_tagLength_get * Description: * Get CPU tag length. * Input: * None * Output: * pLength - CPU tag length. * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input. * Note: * The API can get CPU tag length. */ rtk_api_ret_t rtk_cpu_tagLength_get(rtk_cpu_tag_length_t *pLength) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if(NULL == pLength) return RT_ERR_NULL_POINTER; if ((retVal = rtl8367c_getAsicCputagMode(pLength)) != RT_ERR_OK) return retVal; return RT_ERR_OK; } /* Function Name: * rtk_cpu_priRemap_set * Description: * Configure CPU priorities mapping to internal absolute priority. * Input: * int_pri - internal priority value. * new_pri - new internal priority value. * Output: * None * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input parameters. * RT_ERR_VLAN_PRIORITY - Invalid 1p priority. * RT_ERR_QOS_INT_PRIORITY - Invalid priority. * Note: * Priority of CPU tag assignment for internal asic priority, and it is used for queue usage and packet scheduling. */ rtk_api_ret_t rtk_cpu_priRemap_set(rtk_pri_t int_pri, rtk_pri_t new_pri) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if (new_pri > RTL8367C_PRIMAX || int_pri > RTL8367C_PRIMAX) return RT_ERR_VLAN_PRIORITY; if ((retVal = rtl8367c_setAsicCputagPriorityRemapping(int_pri, new_pri)) != RT_ERR_OK) return retVal; return RT_ERR_OK; } /* Function Name: * rtk_cpu_priRemap_get * Description: * Configure CPU priorities mapping to internal absolute priority. * Input: * int_pri - internal priority value. * Output: * pNew_pri - new internal priority value. * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input parameters. * RT_ERR_VLAN_PRIORITY - Invalid 1p priority. * RT_ERR_QOS_INT_PRIORITY - Invalid priority. * Note: * Priority of CPU tag assignment for internal asic priority, and it is used for queue usage and packet scheduling. */ rtk_api_ret_t rtk_cpu_priRemap_get(rtk_pri_t int_pri, rtk_pri_t *pNew_pri) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if(NULL == pNew_pri) return RT_ERR_NULL_POINTER; if (int_pri > RTL8367C_PRIMAX) return RT_ERR_QOS_INT_PRIORITY; if ((retVal = rtl8367c_getAsicCputagPriorityRemapping(int_pri, pNew_pri)) != RT_ERR_OK) return retVal; return RT_ERR_OK; } /* Function Name: * rtk_cpu_acceptLength_set * Description: * Set CPU accept length. * Input: * length - CPU tag length. * Output: * None * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input. * Note: * The API can set CPU accept length. */ rtk_api_ret_t rtk_cpu_acceptLength_set(rtk_cpu_rx_length_t length) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if (length >= CPU_RX_END) return RT_ERR_INPUT; if ((retVal = rtl8367c_setAsicCputagRxMinLength(length)) != RT_ERR_OK) return retVal; return RT_ERR_OK; } /* Function Name: * rtk_cpu_acceptLength_get * Description: * Get CPU accept length. * Input: * None * Output: * pLength - CPU tag length. * Return: * RT_ERR_OK - OK * RT_ERR_FAILED - Failed * RT_ERR_SMI - SMI access error * RT_ERR_INPUT - Invalid input. * Note: * The API can get CPU accept length. */ rtk_api_ret_t rtk_cpu_acceptLength_get(rtk_cpu_rx_length_t *pLength) { rtk_api_ret_t retVal; /* Check initialization state */ RTK_CHK_INIT_STATE(); if(NULL == pLength) return RT_ERR_NULL_POINTER; if ((retVal = rtl8367c_getAsicCputagRxMinLength(pLength)) != RT_ERR_OK) return retVal; return RT_ERR_OK; }