summaryrefslogtreecommitdiffstats
path: root/target/linux/realtek/files/drivers/net/rtl819x/AsicDriver/rtl865x_asicL2.h
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/realtek/files/drivers/net/rtl819x/AsicDriver/rtl865x_asicL2.h')
-rw-r--r--target/linux/realtek/files/drivers/net/rtl819x/AsicDriver/rtl865x_asicL2.h365
1 files changed, 365 insertions, 0 deletions
diff --git a/target/linux/realtek/files/drivers/net/rtl819x/AsicDriver/rtl865x_asicL2.h b/target/linux/realtek/files/drivers/net/rtl819x/AsicDriver/rtl865x_asicL2.h
new file mode 100644
index 000000000..abe8978bd
--- /dev/null
+++ b/target/linux/realtek/files/drivers/net/rtl819x/AsicDriver/rtl865x_asicL2.h
@@ -0,0 +1,365 @@
+/*
+* Copyright c Realtek Semiconductor Corporation, 2009
+* All rights reserved.
+*
+* Program : Switch table Layer2 switch driver,following features are included:
+* PHY/MII/Port/STP/QOS
+* Abstract :
+* Author : hyking (hyking_liu@realsil.com.cn)
+*/
+
+#ifndef RTL865X_ASICL2_H
+#define RTL865X_ASICL2_H
+
+// Use sw gpio to control led of Port0~Port4
+//#define PATCH_GPIO_FOR_LED 1
+
+#define RTL865XC_QM_DESC_READROBUSTPARAMETER 10
+
+ #define RTL8651_MII_PORTNUMBER 5
+#define RTL8651_MII_PORTMASK 0x20
+#define RTL8651_PHY_NUMBER 5
+
+#define RTL8651_ETHER_AUTO_100FULL 0x00
+#define RTL8651_ETHER_AUTO_100HALF 0x01
+#define RTL8651_ETHER_AUTO_10FULL 0x02
+#define RTL8651_ETHER_AUTO_10HALF 0x03
+#define RTL8651_ETHER_AUTO_1000FULL 0x08
+#define RTL8651_ETHER_AUTO_1000HALF 0x09
+/* chhuang: patch for priority issue */
+#define RTL8651_ETHER_FORCE_100FULL 0x04
+#define RTL8651_ETHER_FORCE_100HALF 0x05
+#define RTL8651_ETHER_FORCE_10FULL 0x06
+#define RTL8651_ETHER_FORCE_10HALF 0x07
+
+#define RTL865XC_MNQUEUE_OUTPUTQUEUE 1
+#define RTL865XC_QOS_OUTPUTQUEUE 1
+
+#if defined(RTL865XC_MNQUEUE_OUTPUTQUEUE) || defined(RTL865XC_QOS_OUTPUTQUEUE)
+typedef struct rtl865xC_outputQueuePara_s {
+
+ uint32 ifg; /* default: Bandwidth Control Include/exclude Preamble & IFG */
+ uint32 gap; /* default: Per Queue Physical Length Gap = 20 */
+ uint32 drop; /* default: Descriptor Run Out Threshold = 500 */
+
+ uint32 systemSBFCOFF; /*System shared buffer flow control turn off threshold*/
+ uint32 systemSBFCON; /*System shared buffer flow control turn on threshold*/
+
+ uint32 systemFCOFF; /* system flow control turn off threshold */
+ uint32 systemFCON; /* system flow control turn on threshold */
+
+ uint32 portFCOFF; /* port base flow control turn off threshold */
+ uint32 portFCON; /* port base flow control turn on threshold */
+
+ uint32 queueDescFCOFF; /* Queue-Descriptor=Based Flow Control turn off Threshold */
+ uint32 queueDescFCON; /* Queue-Descriptor=Based Flow Control turn on Threshold */
+
+ uint32 queuePktFCOFF; /* Queue-Packet=Based Flow Control turn off Threshold */
+ uint32 queuePktFCON; /* Queue-Packet=Based Flow Control turn on Threshold */
+} rtl865xC_outputQueuePara_t;
+#endif
+
+
+/*enum for duplex and speed*/
+enum
+{
+ PORT_DOWN=0,
+ HALF_DUPLEX_10M,
+ HALF_DUPLEX_100M,
+ HALF_DUPLEX_1000M,
+ DUPLEX_10M,
+ DUPLEX_100M,
+ DUPLEX_1000M,
+ PORT_AUTO
+};
+
+/* enum for port ID */
+enum PORTID
+{
+ PHY0 = 0,
+ PHY1 = 1,
+ PHY2 = 2,
+ PHY3 = 3,
+ PHY4 = 4,
+ PHY5 = 5,
+ CPU = 6,
+ EXT1 = 7,
+ EXT2 = 8,
+ EXT3 = 9,
+ MULTEXT = 10,
+};
+
+/* enum for queue ID */
+enum QUEUEID
+{
+ QUEUE0 = 0,
+ QUEUE1,
+ QUEUE2,
+ QUEUE3,
+ QUEUE4,
+ QUEUE5,
+};
+
+/* enum for queue type */
+enum QUEUETYPE
+{
+ STR_PRIO = 0,
+ WFQ_PRIO,
+};
+
+/* enum for output queue number */
+enum QUEUENUM
+{
+ QNUM1 = 1,
+ QNUM2,
+ QNUM3,
+ QNUM4,
+ QNUM5,
+ QNUM6,
+};
+
+/* enum for priority value type */
+enum PRIORITYVALUE
+{
+ PRI0 = 0,
+ PRI1,
+ PRI2,
+ PRI3,
+ PRI4,
+ PRI5,
+ PRI6,
+ PRI7,
+};
+
+typedef struct {
+#ifndef _LITTLE_ENDIAN
+ /* word 0 */
+ uint16 mac39_24;
+ uint16 mac23_8;
+
+ /* word 1 */
+ uint32 reserv0: 6;
+ uint32 auth: 1;
+ uint32 fid:2;
+ uint32 nxtHostFlag : 1;
+ uint32 srcBlock : 1;
+ uint32 agingTime : 2;
+ uint32 isStatic : 1;
+ uint32 toCPU : 1;
+ uint32 extMemberPort : 3;
+ uint32 memberPort : 6;
+ uint32 mac47_40 : 8;
+
+#else /*LITTLE_ENDIAN*/
+ /* word 0 */
+ uint16 mac23_8;
+ uint16 mac39_24;
+
+ /* word 1 */
+ uint32 mac47_40 : 8;
+ uint32 memberPort : 6;
+ uint32 extMemberPort : 3;
+ uint32 toCPU : 1;
+ uint32 isStatic : 1;
+ uint32 agingTime : 2;
+ uint32 srcBlock : 1;
+ uint32 nxtHostFlag : 1;
+ uint32 fid:2;
+ uint32 auth:1;
+ uint32 reserv0:6;
+
+#endif /*LITTLE_ENDIAN*/
+ /* word 2 */
+ uint32 reservw2;
+ /* word 3 */
+ uint32 reservw3;
+ /* word 4 */
+ uint32 reservw4;
+ /* word 5 */
+ uint32 reservw5;
+ /* word 6 */
+ uint32 reservw6;
+ /* word 7 */
+ uint32 reservw7;
+} rtl865xc_tblAsic_l2Table_t;
+
+
+
+typedef struct rtl865x_tblAsicDrv_l2Param_s {
+ ether_addr_t macAddr;
+ uint32 memberPortMask; /*extension ports [rtl8651_totalExtPortNum-1:0] are located at bits [RTL8651_PORT_NUMBER+rtl8651_totalExtPortNum-1:RTL8651_PORT_NUMBER]*/
+ uint32 ageSec;
+ uint32 cpu:1,
+ srcBlk:1,
+ isStatic:1,
+ nhFlag:1,
+ fid:2,
+ auth:1;
+
+} rtl865x_tblAsicDrv_l2Param_t;
+
+typedef struct rtl8651_tblAsic_ethernet_s {
+ uint8 linkUp: 1,
+ phyId: 5,
+ isGPHY: 1;
+} rtl8651_tblAsic_ethernet_t;
+
+#if defined (CONFIG_RTL_ENABLE_RATELIMIT_TABLE)
+typedef struct rtl865x_tblAsicDrv_rateLimitParam_s {
+ uint32 token;
+ uint32 maxToken;
+ uint32 t_remainUnit;
+ uint32 t_intervalUnit;
+ uint32 refill_number;
+} rtl865x_tblAsicDrv_rateLimitParam_t;
+
+typedef struct {
+#ifndef _LITTLE_ENDIAN
+ /* word 0 */
+ uint32 reserv0 : 2;
+ uint32 refillRemainTime : 6;
+ uint32 token : 24;
+ /* word 1 */
+ uint32 reserv1 : 2;
+ uint32 refillTime : 6;
+ uint32 maxToken : 24;
+ /* word 2 */
+ uint32 reserv2 : 8;
+ uint32 refill : 24;
+#else
+ /* word 0 */
+ uint32 token : 24;
+ uint32 refillRemainTime : 6;
+ uint32 reserv0 : 2;
+ /* word 1 */
+ uint32 maxToken : 24;
+ uint32 refillTime : 6;
+ uint32 reserv1 : 2;
+ /* word 2 */
+ uint32 refill : 24;
+ uint32 reserv2 : 8;
+#endif /*_LITTLE_ENDIAN*/
+ /* word 3 */
+ uint32 reservw3;
+ /* word 4 */
+ uint32 reservw4;
+ /* word 5 */
+ uint32 reservw5;
+ /* word 6 */
+ uint32 reservw6;
+ /* word 7 */
+ uint32 reservw7;
+} rtl8651_tblAsic_rateLimitTable_t;
+#endif
+
+extern int32 rtl865x_maxPreAllocRxSkb;
+extern int32 rtl865x_rxSkbPktHdrDescNum;
+extern int32 rtl865x_txSkbPktHdrDescNum;
+
+extern int32 rtl865x_wanPortMask;
+extern int32 rtl865x_lanPortMask;
+
+int32 rtl865x_initAsicL2(rtl8651_tblAsic_InitPara_t *para);
+int32 rtl8651_setAsicL2Table(uint32 row, uint32 column, rtl865x_tblAsicDrv_l2Param_t *l2p);
+int32 rtl8651_delAsicL2Table(uint32 row, uint32 column);
+unsigned int rtl8651_asicL2DAlookup(uint8 *dmac);
+int32 rtl8651_getAsicL2Table(uint32 row, uint32 column, rtl865x_tblAsicDrv_l2Param_t *l2p);
+int32 rtl8651_getAsicPortMirror(uint32 *mRxMask, uint32 *mTxMask, uint32 *mPortMask);
+int32 rtl8651_setAsicPortMirror(uint32 mRxMask, uint32 mTxMask,uint32 mPortMask);
+uint32 rtl8651_filterDbIndex(ether_addr_t * macAddr,uint16 fid);
+
+int32 rtl8651_setAsicL2Table_Patch(uint32 row, uint32 column, ether_addr_t * mac, int8 cpu,
+ int8 srcBlk, uint32 mbr, uint32 ageSec, int8 isStatic, int8 nhFlag, int8 fid, int8 auth);
+int32 rtl8651_getAsicL2Table_Patch(uint32 row, uint32 column, rtl865x_tblAsicDrv_l2Param_t *asic_l2_t);
+
+int32 rtl8651_setAsicPortPatternMatch(uint32 port, uint32 pattern, uint32 patternMask, int32 operation);
+int32 rtl8651_getAsicPortPatternMatch(uint32 port, uint32 *pattern, uint32 *patternMask, int32 *operation);
+
+int32 rtl8651_setAsicSpanningEnable(int8 spanningTreeEnabled);
+int32 rtl8651_getAsicSpanningEnable(int8 *spanningTreeEnabled);
+int32 rtl8651_asicEthernetCableMeterInit(void);
+
+int32 rtl865xC_setAsicSpanningTreePortState(uint32 port, uint32 portState);
+int32 rtl865xC_getAsicSpanningTreePortState(uint32 port, uint32 *portState);
+int32 rtl8651_setAsicMulticastSpanningTreePortState(uint32 port, uint32 portState);
+int32 rtl8651_getAsicMulticastSpanningTreePortState(uint32 port, uint32 *portState);
+
+int32 rtl865xC_setAsicPortPauseFlowControl(uint32 port, uint8 rxEn, uint8 txEn);
+int32 rtl865xC_getAsicPortPauseFlowControl(uint32 port, uint8 *rxEn, uint8 *txEn);
+
+int32 rtl8651_restartAsicEthernetPHYNway(uint32 port);
+
+/*MDC/MDIO*/
+int32 rtl8651_getAsicEthernetPHYReg(uint32 phyId, uint32 regId, uint32 *rData);
+int32 rtl8651_setAsicEthernetPHYReg(uint32 phyId, uint32 regId, uint32 wData);
+
+int32 rtl865xC_setAsicEthernetMIIMode(uint32 port, uint32 mode);
+int32 rtl865xC_setAsicEthernetRGMIITiming(uint32 port, uint32 Tcomp, uint32 Rcomp);
+int32 rtl8651_setAsicEthernetMII(uint32 phyAddress, int32 mode, int32 enabled);
+int32 rtl8651_getAsicEthernetMII(uint32 *phyAddress);
+
+int32 rtl865x_setStormControl(uint32 type,uint32 enable,uint32 percentage);
+
+/*flow control*/
+int32 rtl8651_setAsicPriorityDecision( uint32 portpri, uint32 dot1qpri, uint32 dscppri, uint32 aclpri, uint32 natpri );
+int32 rtl8651_setAsicQueueFlowControlConfigureRegister(enum PORTID port, enum QUEUEID queue, uint32 enable);
+int32 rtl8651_setAsicLBParameter( uint32 token, uint32 tick, uint32 hiThreshold );
+int32 rtl8651_getAsicLBParameter( uint32* pToken, uint32* pTick, uint32* pHiThreshold );
+int32 rtl8651_setAsicQueueRate( enum PORTID port, enum QUEUEID queueid, uint32 pprTime, uint32 aprBurstSize, uint32 apr );
+int32 rtl8651_getAsicQueueRate( enum PORTID port, enum QUEUEID queueid, uint32* pPprTime, uint32* pAprBurstSize, uint32* pApr );
+int32 rtl8651_setAsicPortIngressBandwidth( enum PORTID port, uint32 bandwidth);
+int32 rtl8651_getAsicPortIngressBandwidth( enum PORTID port, uint32* pBandwidth );
+int32 rtl8651_setAsicPortEgressBandwidth( enum PORTID port, uint32 bandwidth );
+int32 rtl8651_getAsicPortEgressBandwidth( enum PORTID port, uint32* pBandwidth );
+int32 rtl8651_setAsicQueueWeight( enum PORTID port, enum QUEUEID queueid, enum QUEUETYPE queueType, uint32 weight );
+int32 rtl8651_getAsicQueueWeight( enum PORTID port, enum QUEUEID queueid, enum QUEUETYPE *pQueueType, uint32 *pWeight );
+int32 rtl8651_setAsicOutputQueueNumber( enum PORTID port, enum QUEUENUM qnum );
+int32 rtl8651_getAsicOutputQueueNumber( enum PORTID port, enum QUEUENUM *qnum );
+int32 rtl8651_setAsicPriorityToQIDMappingTable( enum QUEUENUM qnum, enum PRIORITYVALUE priority, enum QUEUEID qid );
+int32 rtl8651_setAsicCPUPriorityToQIDMappingTable( enum PORTID port, enum PRIORITYVALUE priority, enum QUEUEID qid );
+int32 rtl8651_setAsicSystemBasedFlowControlRegister(uint32 sharedON, uint32 sharedOFF, uint32 fcON, uint32 fcOFF, uint32 drop);
+int32 rtl8651_setAsicQueueDescriptorBasedFlowControlRegister(enum PORTID port, enum QUEUEID queue, uint32 fcON, uint32 fcOFF);
+int32 rtl8651_setAsicQueuePacketBasedFlowControlRegister(enum PORTID port, enum QUEUEID queue, uint32 fcON, uint32 fcOFF);
+int32 rtl8651_setAsicPortBasedFlowControlRegister(enum PORTID port, uint32 fcON, uint32 fcOFF);
+int32 rtl8651_setAsicPerQueuePhysicalLengthGapRegister(uint32 gap);
+int32 rtl8651_getAsicQueueFlowControlConfigureRegister(enum PORTID port, enum QUEUEID queue, uint32 *enable);
+#ifdef CONFIG_RTL_LINKCHG_PROCESS
+int32 rtl8651_setAsicEthernetLinkStatus(uint32 port, int8 linkUp);
+int32 rtl8651_updateAsicLinkAggregatorLMPR(int32 portmask);
+#endif
+#ifdef CONFIG_RTK_VOIP_PORT_LINK
+int rtl8651_getAsicEthernetLinkStatus(uint32 port, int8 *linkUp);
+#endif
+int32 rtl865xC_waitForOutputQueueEmpty(void);
+ int32 rtl8651_resetAsicOutputQueue(void);
+
+ int32 rtl8651_setAsicEthernetBandwidthControl(uint32 port, int8 input, uint32 rate);
+ int32 rtl8651_setAsicFlowControlRegister(uint32 port, uint32 enable);
+ int32 rtl8651_getAsicFlowControlRegister(uint32 port, uint32 *enable);
+ int32 rtl8651_setAsicSystemInputFlowControlRegister(uint32 fcON, uint32 fcOFF);
+ int32 rtl8651_getAsicSystemInputFlowControlRegister(uint32 *fcON, uint32 *fcOFF);
+int32 rtl8651_setAsic802D1xMacBaseAbility( enum PORTID port, uint32 isEnable );
+int32 rtl8651_setAsic802D1xMacBaseDirection(int32 dir);
+int32 rtl8651_setAsicGuestVlanProcessControl( uint32 process);
+
+#if defined(CONFIG_RTL_QOS_8021P_SUPPORT)
+/* for vlan base qos */
+int32 rtl8651_setAsicDot1qAbsolutelyPriority( enum PRIORITYVALUE srcpriority, enum PRIORITYVALUE priority );
+int32 rtl8651_getAsicDot1qAbsolutelyPriority( enum PRIORITYVALUE srcpriority, enum PRIORITYVALUE *pPriority );
+int32 rtl8651_flushAsicDot1qAbsolutelyPriority(void);
+#endif
+
+#if defined (CONFIG_RTL_ENABLE_RATELIMIT_TABLE)
+int32 rtl8651_setAsicRateLimitTable(uint32 index, rtl865x_tblAsicDrv_rateLimitParam_t *rateLimit_t);
+int32 rtl8651_delAsicRateLimitTable(uint32 index);
+int32 rtl8651_getAsicRateLimitTable(uint32 index, rtl865x_tblAsicDrv_rateLimitParam_t *rateLimit_t);
+#endif
+
+#ifdef CONFIG_RTK_VOIP_QOS
+int32 rtl8651_setAsicDscpPriority( uint32 dscp, enum PRIORITYVALUE priority );
+int32 rtl8651_getAsicDscpPriority( uint32 dscp, enum PRIORITYVALUE *pPriority );
+int32 rtl8651_reset_dscp_priority(void);
+int32 rtl8651_cpu_tx_fc(int enable);
+#endif
+
+#endif