📄 swvlantb.h
字号:
/*
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
* All rights reserved.
*
* This software is copyrighted by and is the sole property of
* VIA Networking Technologies, Inc. This software may only be used
* in accordance with the corresponding license agreement. Any unauthorized
* use, duplication, transmission, distribution, or disclosure of this
* software is expressly forbidden.
*
* This software is provided by VIA Networking Technologies, Inc. "as is"
* and any express or implied warranties, including, but not limited to, the
* implied warranties of merchantability and fitness for a particular purpose
* are disclaimed. In no event shall VIA Networking Technologies, Inc.
* be liable for any direct, indirect, incidental, special, exemplary, or
* consequential damages.
*
*
* File: swvlantb.h
*
* Purpose: VLAN hardware accessing functions
*
* Author: Tevin Chen
* Henry Lin
*
* Date: Jan 08, 2002
* May 16, 2005
*
*/
#ifndef __SWVLANTB_H__
#define __SWVLANTB_H__
#if !defined(__TTYPE_H__)
#include "ttype.h"
#endif
#if !defined(__SWSRAM_H__)
#include "swsram.h"
#endif
/*--------------------- Export Definitions ------------------------*/
//
// Bit position for VLAN table fields
//
#define VLAN_BIT_EGRS_MEMBER_S 0
#define VLAN_BIT_EGRS_MEMBER_E 26
#define VLAN_BIT_JUMBO_PASS_S 29
#define VLAN_BIT_JUMBO_PASS_E 29
#define VLAN_BIT_PRI_ADJ_S 30
#define VLAN_BIT_PRI_ADJ_E 30
#define VLAN_BIT_TOS_MAP_1P_S 31
#define VLAN_BIT_TOS_MAP_1P_E 31
#define VLAN_BIT_INGRS_MEMBER_S 32
#define VLAN_BIT_INGRS_MEMBER_E 57
#define VLAN_BIT_CPU_FWD_S 60
#define VLAN_BIT_CPU_FWD_E 63
#define VLAN_BIT_FLD_UCST_CPU_S 60
#define VLAN_BIT_FLD_UCST_CPU_E 60
#define VLAN_BIT_FLD_L2P_MCST_CPU_S 61
#define VLAN_BIT_FLD_L2P_MCST_CPU_E 61
#define VLAN_BIT_FLD_IP_MCST_CPU_S 62
#define VLAN_BIT_FLD_IP_MCST_CPU_E 62
#define VLAN_BIT_FLD_BCST_CPU_S 63
#define VLAN_BIT_FLD_BCST_CPU_E 63
#define VLAN_BIT_TAG_S 64
#define VLAN_BIT_TAG_E 89
#define VLAN_BIT_PER_VLAN_PRI_S 92
#define VLAN_BIT_PER_VLAN_PRI_E 94
#define VLAN_BIT_PER_VLAN_VALID_S 95
#define VLAN_BIT_PER_VLAN_VALID_E 95
#define VLAN_BIT_FID_S 96
#define VLAN_BIT_FID_E 108
#define VLAN_BIT_VERBATIM_MODE_S 109
#define VLAN_BIT_VERBATIM_MODE_E 109
#define VLAN_BIT_LOCAL_TAG_S 110
#define VLAN_BIT_LOCAL_TAG_E 110
#define VLAN_BIT_MSTID_S 120
#define VLAN_BIT_MSTID_E 125
#define VLAN_BIT_MSTID_VALID_S 126
#define VLAN_BIT_MSTID_VALID_E 126
#define VLAN_BIT_VALID_S 127
#define VLAN_BIT_VALID_E 127
//
// Bit pattern for VLAN table fields
//
#define VLAN_BPTN_VALID_VLAN 0x80 // [127], Valid
// Definiton of vlan mode
enum {
VLAN_MODE_DISABLE,
VLAN_MODE_PORTBASE,
VLAN_MODE_8021Q,
VLAN_MODE_PROTOBASE
};
// Definition of vlan ingress filter config code
enum {
VLAN_INGRS_FILTER_DISABLE,
VLAN_INGRS_FILTER_NOTMBR,
VLAN_INGRS_FILTER_UNTAG,
VLAN_INGRS_FILTER_NOTMBR_UNTAG
};
#define PORTBASE_VLAN_GRP_VID_BASE 1
/*--------------------- Export Types ------------------------------*/
// VLAN table entry structure
struct tagSVlanEntry {
UINT16 u16Vid; // VID of the entry, is Address Offset from begining of the table
UINT16 u16Fid; // FID of the entry
UINT32 u32TagPortMsk; // Egress tag rule mask
UINT32 u32EgrsMbrPortMsk; // Egress membership mask
UINT32 u32IngrsMbrPortMsk; // Ingress membership mask
BOOL bJumboPass; // Jumbo packet pass Enable
BOOL bPriAdj; // Priority Adjustment Enable
BOOL bTosTo8021p; // ToS/DSCP-to-802.1p mapping enable
UINT8 u8CpuFwd; // bit[0], forward flooded unicast packets to CPU port
// bit[1], forward flooded L2 multicast packets to CPU port
// bit[2], forward flooded IP multicast packets to CPU port
// bit[3], forward broadcast packets to CPU port
UINT8 u8PerVlanPri; // Per-VLAN priority
BOOL bPerVlanPriVld; // Per-VLAN priority valid
BOOL bVerbMode; // Force VLAN verbatim mode
BOOL bLocTagRule; // Local tag rule enable
UINT8 u8MstId; // Multiple Spanning Tree ID (MSTID)
BOOL bMstIdVld; // Multiple Spanning Tree ID (MSTID) Valid
BOOL bIsValid; // is this vlan entry valid? used only by vlan table cache
};
typedef struct tagSVlanEntry SVlanEntry;
// Definitions related to PortBase VLAN setting
#define PORTBASE_VLAN_UNSET_GRP_VID 128
#define PORTBASE_VLAN_FID 128
#define BIT_MASK_PORT_CPU 0x04000000
#define VID_NUM_8021Q 4096
#define INTER_VLAN_MAX_NUM (128)
#define INTER_VLAN_TBL_SIZE (INTER_VLAN_MAX_NUM << SHIFT_NUM_SIZE_16Byte)
#define VLAN_ENTRY_SIZE SRAM_ENTRY_SIZE_16Byte
/*--------------------- Export Macros -----------------------------*/
#define PORTBASE_ID_TO_VID(u8PortId) ( (UINT16)(PORTBASE_VLAN_GRP_VID_BASE + u8PortId) )
#define PORTBASE_ID_TO_ADDR(u8PortId) ( SWVLANTB_dwVidToSramAddr( PORTBASE_ID_TO_VID(u8PortId) ) )
/*--------------------- Export Classes ----------------------------*/
/*--------------------- Export Variables --------------------------*/
/*--------------------- Export Functions --------------------------*/
UINT8 SWVLANTB_u8GetVlanMode(void);
void SWVLANTB_vSetVlanMode(UINT8 u8VlanMode);
BOOL SWVLANTB_bGetEntry(UINT16 u16Indx, SVlanEntry* pSEntry);
BOOL SWVLANTB_bSetEntry(SVlanEntry* pSEntry);
BOOL SWVLANTB_bDelEntry(UINT16 u16Indx);
BOOL SWVLANTB_bIsEntryInvalid(UINT16 u16Indx);
void SWVLANTB_vSetIngrsFilter(UINT8 u8PortId, UINT8 u8Cfg);
void SWVLANTB_vSetClassMethod(UINT16 u16Method);
void SWVLANTB_vSetVerbatimMode(UINT8 u8PortId, BOOL bEn);
void SWVLANTB_vPortBaseClearAllGrp(void);
void SWVLANTB_vPortBaseAddGrp(UINT32 u32MbrMsk);
void SWVLANTB_vPortBaseSetCfgForAllGrp(void);
void SWVLANTB_vPvidGet(UINT8 u8PortId, PUINT16 pu16Pvid);
void SWVLANTB_vPvidSet(UINT8 u8PortId, UINT16 u16Pvid);
BOOL SWVLANTB_bIsIntEntryValid(UINT16 u16Vid);
UINT32 SWVLANTB_dwVidToSramAddr(UINT16 u16Vid);
UINT16 SWVLANTB_wSramAddrToVid(UINT32 u32SramAddr);
//For forward compatible purpose
void SWVLANTB_vPvidSetPage(UINT8 u8PvidPageNo);
BOOL SWVLANTB_bIsPvidOutOfPage(UINT16 u16Pvid);
#endif /* __SWVLANTB_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -