sdk-hwV1.3/lichee/linux-4.9/drivers/net/phy/rtl8363_nb/oam.c

325 lines
7.0 KiB
C
Executable File

/*
* Copyright (C) 2013 Realtek Semiconductor Corp.
* All Rights Reserved.
*
* This program is the proprietary software of Realtek Semiconductor
* Corporation and/or its licensors, and only be used, duplicated,
* modified or distributed under the authorized license from Realtek.
*
* ANY USE OF THE SOFTWARE OTHER THAN AS AUTHORIZED UNDER
* THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
*
* $Revision: 79629 $
* $Date: 2017-06-14 18:08:03 +0800 (週三, 14 六月 2017) $
*
* Purpose : RTK switch high-level API for RTL8367/RTL8367C
* Feature : Here is a list of all functions and variables in OAM(802.3ah) module.
*
*/
#include <rtk_switch.h>
#include <rtk_error.h>
#include <oam.h>
#include <linux/string.h>
#include <rtl8367c_asicdrv.h>
#include <rtl8367c_asicdrv_oam.h>
/* Module Name : OAM */
static rtk_api_ret_t _rtk_oam_init(void)
{
return RT_ERR_OK;
} /* end of rtk_oam_init */
static rtk_api_ret_t _rtk_oam_state_set(rtk_enable_t enabled)
{
rtk_api_ret_t retVal;
/* Check initialization state */
RTK_CHK_INIT_STATE();
if (enabled >= RTK_ENABLE_END)
return RT_ERR_INPUT;
if ((retVal = rtl8367c_setAsicOamEnable(enabled))!=RT_ERR_OK)
return retVal;
return RT_ERR_OK;
}
static rtk_api_ret_t _rtk_oam_state_get(rtk_enable_t *pEnabled)
{
rtk_api_ret_t retVal;
/* Check initialization state */
RTK_CHK_INIT_STATE();
if ((retVal = rtl8367c_getAsicOamEnable(pEnabled))!=RT_ERR_OK)
return retVal;
return RT_ERR_OK;
}
static rtk_api_ret_t _rtk_oam_parserAction_set(rtk_port_t port, rtk_oam_parser_act_t action)
{
rtk_api_ret_t retVal;
/* Check initialization state */
RTK_CHK_INIT_STATE();
/* Check Port Valid */
RTK_CHK_PORT_VALID(port);
if (action >= OAM_PARSER_ACTION_END)
return RT_ERR_INPUT;
if ((retVal = rtl8367c_setAsicOamParser(rtk_switch_port_L2P_get(port), action))!=RT_ERR_OK)
return retVal;
return RT_ERR_OK;
}
static rtk_api_ret_t _rtk_oam_parserAction_get(rtk_port_t port, rtk_oam_parser_act_t *pAction)
{
rtk_api_ret_t retVal;
/* Check initialization state */
RTK_CHK_INIT_STATE();
/* Check Port Valid */
RTK_CHK_PORT_VALID(port);
if ((retVal = rtl8367c_getAsicOamParser(rtk_switch_port_L2P_get(port), pAction))!=RT_ERR_OK)
return retVal;
return RT_ERR_OK;
}
static rtk_api_ret_t _rtk_oam_multiplexerAction_set(rtk_port_t port, rtk_oam_multiplexer_act_t action)
{
rtk_api_ret_t retVal;
/* Check initialization state */
RTK_CHK_INIT_STATE();
/* Check Port Valid */
RTK_CHK_PORT_VALID(port);
if (action >= OAM_MULTIPLEXER_ACTION_END)
return RT_ERR_INPUT;
if ((retVal = rtl8367c_setAsicOamMultiplexer(rtk_switch_port_L2P_get(port), action))!=RT_ERR_OK)
return retVal;
return RT_ERR_OK;
}
static rtk_api_ret_t _rtk_oam_multiplexerAction_get(rtk_port_t port, rtk_oam_multiplexer_act_t *pAction)
{
rtk_api_ret_t retVal;
/* Check initialization state */
RTK_CHK_INIT_STATE();
/* Check Port Valid */
RTK_CHK_PORT_VALID(port);
if ((retVal = rtl8367c_getAsicOamMultiplexer(rtk_switch_port_L2P_get(port), pAction))!=RT_ERR_OK)
return retVal;
return RT_ERR_OK;
}
/* Function Name:
* rtk_oam_init
* Description:
* Initialize oam module.
* Input:
* None
* Output:
* None
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* Note:
* Must initialize oam module before calling any oam APIs.
*/
rtk_api_ret_t rtk_oam_init(void)
{
rtk_api_ret_t retVal;
RTK_API_LOCK();
retVal = _rtk_oam_init();
RTK_API_UNLOCK();
return retVal;
} /* end of rtk_oam_init */
/* Function Name:
* rtk_oam_state_set
* Description:
* This API set OAM state.
* Input:
* enabled -OAMstate
* Output:
* None.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Error parameter
* Note:
* This API set OAM state.
*/
rtk_api_ret_t rtk_oam_state_set(rtk_enable_t enabled)
{
rtk_api_ret_t retVal;
RTK_API_LOCK();
retVal = _rtk_oam_state_set(enabled);
RTK_API_UNLOCK();
return retVal;
}
/* Function Name:
* rtk_oam_state_get
* Description:
* This API get OAM state.
* Input:
* None.
* Output:
* pEnabled - H/W IGMP state
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Error parameter
* Note:
* This API set current OAM state.
*/
rtk_api_ret_t rtk_oam_state_get(rtk_enable_t *pEnabled)
{
rtk_api_ret_t retVal;
RTK_API_LOCK();
retVal = _rtk_oam_state_get(pEnabled);
RTK_API_UNLOCK();
return retVal;
}
/* Function Name:
* rtk_oam_parserAction_set
* Description:
* Set OAM parser action
* Input:
* port - port id
* action - parser action
* Output:
* None
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_PORT_ID - invalid port id
* Note:
* None
*/
rtk_api_ret_t rtk_oam_parserAction_set(rtk_port_t port, rtk_oam_parser_act_t action)
{
rtk_api_ret_t retVal;
RTK_API_LOCK();
retVal = _rtk_oam_parserAction_set(port, action);
RTK_API_UNLOCK();
return retVal;
}
/* Function Name:
* rtk_oam_parserAction_set
* Description:
* Get OAM parser action
* Input:
* port - port id
* Output:
* pAction - parser action
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_PORT_ID - invalid port id
* Note:
* None
*/
rtk_api_ret_t rtk_oam_parserAction_get(rtk_port_t port, rtk_oam_parser_act_t *pAction)
{
rtk_api_ret_t retVal;
RTK_API_LOCK();
retVal = _rtk_oam_parserAction_get(port, pAction);
RTK_API_UNLOCK();
return retVal;
}
/* Function Name:
* rtk_oam_multiplexerAction_set
* Description:
* Set OAM multiplexer action
* Input:
* port - port id
* action - parser action
* Output:
* None
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_PORT_ID - invalid port id
* Note:
* None
*/
rtk_api_ret_t rtk_oam_multiplexerAction_set(rtk_port_t port, rtk_oam_multiplexer_act_t action)
{
rtk_api_ret_t retVal;
RTK_API_LOCK();
retVal = _rtk_oam_multiplexerAction_set(port, action);
RTK_API_UNLOCK();
return retVal;
}
/* Function Name:
* rtk_oam_parserAction_set
* Description:
* Get OAM multiplexer action
* Input:
* port - port id
* Output:
* pAction - parser action
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_PORT_ID - invalid port id
* Note:
* None
*/
rtk_api_ret_t rtk_oam_multiplexerAction_get(rtk_port_t port, rtk_oam_multiplexer_act_t *pAction)
{
rtk_api_ret_t retVal;
RTK_API_LOCK();
retVal = _rtk_oam_multiplexerAction_get(port, pAction);
RTK_API_UNLOCK();
return retVal;
}