realtek-doc/sources/uboot-be550/drivers/net/rtl8372/vlan.h
Markus Stockhausen 9b3bf98ee9 add BE550 sources
2025-10-14 01:59:03 -04:00

716 lines
22 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.
*
* Purpose : RTL8373 switch high-level API
*
* Feature : The file includes Trap module high-layer VLAN defination
*
*/
#ifndef __RTK_API_VLAN_H__
#define __RTK_API_VLAN_H__
/*
* Data Type Declaration
*/
#define RTK_VID_MAX (0xFFF)
#define RTK_MAX_NUM_OF_MSTI (0xF)
#define RTK_FID_MAX (0xF)
typedef rtk_uint32 rtk_stp_msti_id_t; /* MSTI ID */
typedef enum rtk_stp_state_e
{
STP_STATE_DISABLED = 0,
STP_STATE_BLOCKING,
STP_STATE_LEARNING,
STP_STATE_FORWARDING,
STP_STATE_END
} rtk_stp_state_t;
typedef rtk_uint32 rtk_vlan_proto_type_t; /* protocol and port based VLAN protocol type */
typedef enum rtk_vlan_acceptFrameType_e
{
ACCEPT_FRAME_TYPE_ALL = 0, /* untagged, priority-tagged and tagged */
ACCEPT_FRAME_TYPE_TAG_ONLY, /* tagged */
ACCEPT_FRAME_TYPE_UNTAG_ONLY, /* untagged and priority-tagged */
ACCEPT_FRAME_TYPE_END
} rtk_vlan_acceptFrameType_t;
/* frame type of protocol vlan - reference 802.1v standard */
typedef enum rtk_vlan_protoVlan_frameType_e
{
FRAME_TYPE_ETHERNET = 0,
FRAME_TYPE_LLCOTHER,
FRAME_TYPE_RFC1042,
FRAME_TYPE_END
} rtk_vlan_protoVlan_frameType_t;
/* tagged mode of VLAN - reference realtek private specification */
typedef enum rtk_vlan_egressTagMode_e
{
VLAN_EGRESS_TAG_MODE_ORIGINAL = 0,
VLAN_EGRESS_TAG_MODE_KEEP_FORMAT,
VLAN_EGRESS_TAG_MODE_PRI,
VLAN_EGRESS_TAG_MODE_REAL_KEEP,
VLAN_EGRESS_TAG_MODE_END
} rtk_vlan_egressTagMode_t;
typedef enum rtk_vlan_resVidAction_e
{
RSV_VID_ACTION_UNTAG = 0,
RSV_VID_ACTION_TAG,
RSV_VID_ACTION_END
}
rtk_vlan_resVidAction_t;
/* Protocol-and-port-based Vlan structure */
typedef struct rtk_vlan_protoAndPortInfo_s
{
rtk_uint32 proto_type;
rtk_vlan_protoVlan_frameType_t frame_type;
rtk_vlan_t cvid;
rtk_pri_t cpri;
}rtk_vlan_protoAndPortInfo_t;
typedef struct rtk_vlan_entry_s
{
rtk_portmask_t mbr;
rtk_portmask_t untag;
rtk_uint16 fid_msti;
rtk_uint16 svlan_chk_ivl_svl;
rtk_uint16 ivl_svl;
}rtk_vlan_entry_t;
typedef struct rtk_vlan_disL2_learn_s
{
rtk_uint32 valid;
rtk_uint32 vid;
rtk_uint32 act;
}rtk_vlan_disL2_learn_t;
/* Function Name:
* rtk_vlan_init
* Description:
* Initialize VLAN.
* Input:
* None
* Output:
* None
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* Note:
* VLAN is disabled by default. User has to call this API to enable VLAN before
* using it. And It will set a default VLAN(vid 1) including all ports and set
* all ports PVID to the default VLAN.
*/
extern rtk_api_ret_t rtk_vlan_init(void);
/* Function Name:
* rtk_vlan_set
* Description:
* Set a VLAN entry.
* Input:
* vid - VLAN ID to configure.
* pVlanCfg - VLAN Configuration
* 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_L2_FID - Invalid FID.
* RT_ERR_VLAN_PORT_MBR_EXIST - Invalid member port mask.
* RT_ERR_VLAN_VID - Invalid VID parameter.
* Note:
*
*/
extern rtk_api_ret_t rtk_vlan_set(rtk_vlan_t vid, rtk_vlan_entry_t *pVlanCfg);
/* Function Name:
* rtk_vlan_get
* Description:
* Get a VLAN entry.
* Input:
* vid - VLAN ID to configure.
* Output:
* pVlanCfg - VLAN Configuration
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_VLAN_VID - Invalid VID parameter.
* Note:
*
*/
extern rtk_api_ret_t rtk_vlan_get(rtk_vlan_t vid, rtk_vlan_entry_t *pVlanCfg);
/* Function Name:
* rtk_vlan_egrFilterEnable_set
* Description:
* Set VLAN egress filter.
* Input:
* egrFilter - Egress filtering
* Output:
* None.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_ENABLE - Invalid input parameters.
* Note:
*
*/
extern rtk_api_ret_t rtk_vlan_egrFilterEnable_set(rtk_enable_t egrFilter);
/* Function Name:
* rtk_vlan_egrFilterEnable_get
* Description:
* Get VLAN egress filter.
* Input:
* pEgrFilter - Egress filtering
* Output:
* None.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_NULL_POINTER - NULL Pointer.
* Note:
*
*/
extern rtk_api_ret_t rtk_vlan_egrFilterEnable_get(rtk_enable_t *pEgrFilter);
/* Function Name:
* rtk_vlan_portPvid_set
* Description:
* Set port to specified VLAN ID(PVID).
* Input:
* port - Port id.
* pvid - Specified VLAN ID.
* Output:
* None
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_PORT_ID - Invalid port number.
* RT_ERR_VLAN_PRIORITY - Invalid priority.
* RT_ERR_VLAN_ENTRY_NOT_FOUND - VLAN entry not found.
* RT_ERR_VLAN_VID - Invalid VID parameter.
* Note:
* The API is used for Port-based VLAN. The untagged frame received from the
* port will be classified to the specified VLAN and assigned to the specified priority.
*/
extern rtk_api_ret_t rtk_vlan_portPvid_set(rtk_port_t port, rtk_vlan_t pvid);
/* Function Name:
* rtk_vlan_portPvid_get
* Description:
* Get VLAN ID(PVID) on specified port.
* Input:
* port - Port id.
* Output:
* pPvid - Specified VLAN ID.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_PORT_ID - Invalid port number.
* Note:
* The API can get the PVID and 802.1p priority for the PVID of Port-based VLAN.
*/
extern rtk_api_ret_t rtk_vlan_portPvid_get(rtk_port_t port, rtk_vlan_t *pPvid);
/* Function Name:
* rtk_vlan_portIgrFilterEnable_set
* Description:
* Set VLAN ingress for each port.
* Input:
* port - Port id.
* igrFilter - VLAN ingress function enable status.
* Output:
* None
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_PORT_ID - Invalid port number
* RT_ERR_ENABLE - Invalid enable input
* Note:
* The status of vlan ingress filter is as following:
* - DISABLED
* - ENABLED
* While VLAN function is enabled, ASIC will decide VLAN ID for each received frame and get belonged member
* ports from VLAN table. If received port is not belonged to VLAN member ports, ASIC will drop received frame if VLAN ingress function is enabled.
*/
extern rtk_api_ret_t rtk_vlan_portIgrFilterEnable_set(rtk_port_t port, rtk_enable_t igrFilter);
/* Function Name:
* rtk_vlan_portIgrFilterEnable_get
* Description:
* Get VLAN Ingress Filter
* Input:
* port - Port id.
* Output:
* pIgrFilter - VLAN ingress function enable status.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_PORT_ID - Invalid port number.
* Note:
* The API can Get the VLAN ingress filter status.
* The status of vlan ingress filter is as following:
* - DISABLED
* - ENABLED
*/
extern rtk_api_ret_t rtk_vlan_portIgrFilterEnable_get(rtk_port_t port, rtk_enable_t *pIgrFilter);
/* Function Name:
* rtk_vlan_portAcceptFrameType_set
* Description:
* Set VLAN accept_frame_type
* Input:
* port - Port id.
* acceptFrameType - accept frame type
* Output:
* None
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_PORT_ID - Invalid port number.
* RT_ERR_VLAN_ACCEPT_FRAME_TYPE - Invalid frame type.
* Note:
* The API is used for checking 802.1Q tagged frames.
* The accept frame type as following:
* - ACCEPT_FRAME_TYPE_ALL
* - ACCEPT_FRAME_TYPE_TAG_ONLY
* - ACCEPT_FRAME_TYPE_UNTAG_ONLY
*/
extern rtk_api_ret_t rtk_vlan_portAcceptFrameType_set(rtk_port_t port, rtk_vlan_acceptFrameType_t acceptFrameType);
/* Function Name:
* rtk_vlan_portAcceptFrameType_get
* Description:
* Get VLAN accept_frame_type
* Input:
* port - Port id.
* Output:
* pAcceptFrameType - accept frame type
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_PORT_ID - Invalid port number.
* Note:
* The API can Get the VLAN ingress filter.
* The accept frame type as following:
* - ACCEPT_FRAME_TYPE_ALL
* - ACCEPT_FRAME_TYPE_TAG_ONLY
* - ACCEPT_FRAME_TYPE_UNTAG_ONLY
*/
extern rtk_api_ret_t rtk_vlan_portAcceptFrameType_get(rtk_port_t port, rtk_vlan_acceptFrameType_t *pAcceptFrameType);
/* Function Name:
* rtk_vlan_tagMode_set
* Description:
* Set CVLAN egress tag mode
* Input:
* port - Port id.
* tagMode - The egress tag mode.
* Output:
* None
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_PORT_ID - Invalid port number.
* RT_ERR_INPUT - Invalid input parameter.
* RT_ERR_ENABLE - Invalid enable input.
* Note:
* The API can set Egress tag mode. There are 4 mode for egress tag:
* - VLAN_EGRESS_TAG_MODE_ORIGINAL,
* - VLAN_EGRESS_TAG_MODE_KEEP_FORMAT,
* - VLAN_EGRESS_TAG_MODE_PRI.
* - VLAN_EGRESS_TAG_MODE_REAL_KEEP,
*/
extern rtk_api_ret_t rtk_vlan_tagMode_set(rtk_port_t port, rtk_vlan_egressTagMode_t tagMode);
/* Function Name:
* rtk_vlan_tagMode_get
* Description:
* Get CVLAN egress tag mode
* Input:
* port - Port id.
* Output:
* pTagMode - The egress tag mode.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_PORT_ID - Invalid port number.
* Note:
* The API can get Egress tag mode. There are 4 mode for egress tag:
* - VLAN_EGRESS_TAG_MODE_ORIGINAL,
* - VLAN_EGRESS_TAG_MODE_KEEP_FORMAT,
* - VLAN_EGRESS_TAG_MODE_PRI.
* - VLAN_EGRESS_TAG_MODE_REAL_KEEP,
*/
extern rtk_api_ret_t rtk_vlan_tagMode_get(rtk_port_t port, rtk_vlan_egressTagMode_t *pTagMode);
/* Function Name:
* rtk_vlan_transparent_set
* Description:
* Set VLAN transparent mode
* Input:
* egrPort - Egress Port id.
* pIgrPmsk - Ingress Port Mask.
* 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_PORT_ID - Invalid port number.
* Note:
* None.
*/
extern rtk_api_ret_t rtk_vlan_transparent_set(rtk_port_t egrPort, rtk_portmask_t *pIgrPmsk);
/* Function Name:
* rtk_vlan_transparent_get
* Description:
* Get VLAN transparent mode
* Input:
* egrPort - Egress Port id.
* Output:
* pIgrPmsk - Ingress Port Mask
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_PORT_ID - Invalid port number.
* Note:
* None.
*/
extern rtk_api_ret_t rtk_vlan_transparent_get(rtk_port_t egrPort, rtk_portmask_t *pIgrPmsk);
/* Function Name:
* rtk_vlan_keep_set
* Description:
* Set VLAN egress keep mode
* Input:
* egrPort - Egress Port id.
* pIgrPmsk - Ingress Port Mask.
* 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_PORT_ID - Invalid port number.
* Note:
* None.
*/
extern rtk_api_ret_t rtk_vlan_keep_set(rtk_port_t egrPort, rtk_portmask_t *pIgrPmsk);
/* Function Name:
* rtk_vlan_keep_get
* Description:
* Get VLAN egress keep mode
* Input:
* egrPort - Egress Port id.
* Output:
* pIgrPmsk - Ingress Port Mask
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_PORT_ID - Invalid port number.
* Note:
* None.
*/
extern rtk_api_ret_t rtk_vlan_keep_get(rtk_port_t egrPort, rtk_portmask_t *pIgrPmsk);
/* Function Name:
* rtk_vlan_stg_set
* Description:
* Set spanning tree group instance of the vlan to the specified device
* Input:
* vid - Specified VLAN ID.
* stg - spanning tree group instance.
* Output:
* None
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_MSTI - Invalid msti parameter
* RT_ERR_INPUT - Invalid input parameter.
* RT_ERR_VLAN_VID - Invalid VID parameter.
* Note:
* The API can set spanning tree group instance of the vlan to the specified device.
*/
extern rtk_api_ret_t rtk_vlan_stg_set(rtk_vlan_t vid, rtk_stp_msti_id_t stg);
/* Function Name:
* rtk_vlan_stg_get
* Description:
* Get spanning tree group instance of the vlan to the specified device
* Input:
* vid - Specified VLAN ID.
* Output:
* pStg - spanning tree group instance.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_VLAN_VID - Invalid VID parameter.
* Note:
* The API can get spanning tree group instance of the vlan to the specified device.
*/
extern rtk_api_ret_t rtk_vlan_stg_get(rtk_vlan_t vid, rtk_stp_msti_id_t *pStg);
/* Function Name:
* rtk_vlan_portFid_set
* Description:
* Set port-based filtering database
* Input:
* port - Port id.
* enable - ebable port-based FID
* fid - Specified filtering database.
* Output:
* None
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_L2_FID - Invalid fid.
* RT_ERR_INPUT - Invalid input parameter.
* RT_ERR_PORT_ID - Invalid port ID.
* Note:
* The API can set port-based filtering database. If the function is enabled, all input
* packets will be assigned to the port-based fid regardless vlan tag.
*/
extern rtk_api_ret_t rtk_vlan_portFid_set(rtk_port_t port, rtk_enable_t enable, rtk_fid_t fid);
/* Function Name:
* rtk_vlan_portFid_get
* Description:
* Get port-based filtering database
* Input:
* port - Port id.
* Output:
* pEnable - ebable port-based FID
* pFid - Specified filtering database.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Invalid input parameters.
* RT_ERR_PORT_ID - Invalid port ID.
* Note:
* The API can get port-based filtering database status. If the function is enabled, all input
* packets will be assigned to the port-based fid regardless vlan tag.
*/
extern rtk_api_ret_t rtk_vlan_portFid_get(rtk_port_t port, rtk_enable_t *pEnable, rtk_fid_t *pFid);
/* Function Name:
* rtk_vlan_UntagDscpPriorityEnable_set
* Description:
* Set Untag DSCP priority assign
* Input:
* enable - state of Untag DSCP priority assign
* Output:
* None
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_ENABLE - Invalid input parameters.
* Note:
*
*/
extern rtk_api_ret_t rtk_vlan_UntagDscpPriorityEnable_set(rtk_enable_t enable);
/* Function Name:
* rtk_vlan_UntagDscpPriorityEnable_get
* Description:
* Get Untag DSCP priority assign
* Input:
* None
* Output:
* pEnable - state of Untag DSCP priority assign
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_NULL_POINTER - Null pointer
* Note:
*
*/
extern rtk_api_ret_t rtk_vlan_UntagDscpPriorityEnable_get(rtk_enable_t *pEnable);
/* Function Name:
* rtk_vlan_reservedVidAction_set
* Description:
* Set Action of VLAN ID = 0 & 4095 tagged packet
* Input:
* actionVid0 - Action for VID 0.
* actionVid4095 - Action for VID 4095.
* 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_vlan_reservedVidAction_set(rtk_vlan_resVidAction_t actionVid0, rtk_vlan_resVidAction_t actionVid4095);
/* Function Name:
* rtk_vlan_reservedVidAction_get
* Description:
* Get Action of VLAN ID = 0 & 4095 tagged packet
* Input:
* pActionVid0 - Action for VID 0.
* pActionVid4095 - Action for VID 4095.
* Output:
* None.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_NULL_POINTER - NULL Pointer
* Note:
*
*/
extern rtk_api_ret_t rtk_vlan_reservedVidAction_get(rtk_vlan_resVidAction_t *pActionVid0, rtk_vlan_resVidAction_t *pActionVid4095);
/* Function Name:
* rtk_vlan_realKeepRemarkEnable_set
* Description:
* Set Real keep 1p remarking feature
* Input:
* enabled - State of 1p remarking at real keep packet
* 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_vlan_realKeepRemarkEnable_set(rtk_enable_t enabled);
/* Function Name:
* rtk_vlan_realKeepRemarkEnable_get
* Description:
* Get Real keep 1p remarking feature
* Input:
* None.
* Output:
* pEnabled - State of 1p remarking at real keep packet
* 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_vlan_realKeepRemarkEnable_get(rtk_enable_t *pEnabled);
/*******************************************************************************
* Function Name: rtk_vlan_disL2Learn_set
*
* Description:
* config a L2 disable learning entry which based on vlan id
*Input:
* index: entry index
* pDisL2LearnCfg: L2 disable learning database
*Output:
* None
*Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_ENTRY_INDEX - error entry
* RT_ERR_ENABLE - error action
* RT_ERR_NULL_POINTER - NULL Pointer
* RT_ERR_VLAN_VID - Invalid VID parameter.
*Note: None
*******************************************************************************/
extern rtk_api_ret_t rtk_vlan_disL2Learn_set(rtk_vlan_disL2_learn_t *pDisL2LearnCfg);
/*******************************************************************************
* Function Name: rtk_vlan_disL2Learn_get
*
* Description:
* get a L2 disable learning entry which based on vlan id
*Input:
* index: entry index
* pDisL2LearnCfg: L2 disable learning database
*Output:
* None
*Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_ENTRY_INDEX - error entry
* RT_ERR_ENABLE - error action
* RT_ERR_NULL_POINTER - NULL Pointer
* RT_ERR_VLAN_VID - Invalid VID parameter.
*Note: None
*******************************************************************************/
extern rtk_api_ret_t rtk_vlan_disL2Learn_get(rtk_uint32 index, rtk_vlan_disL2_learn_t *pDisL2LearnCfg);
/* Function Name:
* rtk_vlan_reset
* Description:
* Reset VLAN
* Input:
* None.
* Output:
* None.
* Return:
* RT_ERR_OK - OK
* RT_ERR_FAILED - Failed
* RT_ERR_SMI - SMI access error
* RT_ERR_INPUT - Error Input
* Note:
*
*/
rtk_api_ret_t rtk_vlan_reset(void);
#endif /* __RTK_API_VLAN_H__ */