2 * Copyright (C) 2013 Realtek Semiconductor Corp.
5 * Unless you and Realtek execute a separate written software license
6 * agreement governing use of this software, this software is licensed
7 * to you under the terms of the GNU General Public License version 2,
8 * available at https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
11 * $Date: 2017-03-08 15:13:58 +0800 (¶g¤T, 08 ¤T¤ë 2017) $
13 * Purpose : RTL8367C switch high-level API for RTL8367C
14 * Feature : LUT related functions
19 #ifndef _RTL8367C_ASICDRV_LUT_H_
20 #define _RTL8367C_ASICDRV_LUT_H_
22 #include <rtl8367c_asicdrv.h>
24 #define RTL8367C_LUT_AGETIMERMAX (7)
25 #define RTL8367C_LUT_AGESPEEDMAX (3)
26 #define RTL8367C_LUT_LEARNLIMITMAX (0x1040)
27 #define RTL8367C_LUT_ADDRMAX (0x103F)
28 #define RTL8367C_LUT_IPMCGRP_TABLE_MAX (0x3F)
29 #define RTL8367C_LUT_ENTRY_SIZE (6)
30 #define RTL8367C_LUT_BUSY_CHECK_NO (10)
32 #define RTL8367C_LUT_TABLE_SIZE (6)
34 enum RTL8367C_LUTHASHMETHOD
{
42 enum RTL8367C_LRNOVERACT
{
50 enum RTL8367C_LUTREADMETHOD
{
53 LUTREADMETHOD_ADDRESS
,
54 LUTREADMETHOD_NEXT_ADDRESS
,
55 LUTREADMETHOD_NEXT_L2UC
,
56 LUTREADMETHOD_NEXT_L2MC
,
57 LUTREADMETHOD_NEXT_L3MC
,
58 LUTREADMETHOD_NEXT_L2L3MC
,
59 LUTREADMETHOD_NEXT_L2UCSPA
,
62 enum RTL8367C_FLUSHMODE
70 enum RTL8367C_FLUSHTYPE
72 FLUSHTYPE_DYNAMIC
= 0,
78 typedef struct LUTTABLE
{
84 rtk_uint16 cvid_fid
:12;
88 rtk_uint16 nosalearn
:1;
89 rtk_uint16 da_block
:1;
90 rtk_uint16 sa_block
:1;
98 rtk_uint16 l3lookup
:1;
99 rtk_uint16 igmp_asic
:1;
100 rtk_uint16 igmpidx
:8;
102 rtk_uint16 lookup_hit
:1;
103 rtk_uint16 lookup_busy
:1;
104 rtk_uint16 address
:13;
106 rtk_uint16 l3vidlookup
:1;
107 rtk_uint16 l3_vid
:12;
109 rtk_uint16 wait_time
;
113 extern ret_t
rtl8367c_setAsicLutIpMulticastLookup(rtk_uint32 enabled
);
114 extern ret_t
rtl8367c_getAsicLutIpMulticastLookup(rtk_uint32
* pEnabled
);
115 extern ret_t
rtl8367c_setAsicLutIpMulticastVidLookup(rtk_uint32 enabled
);
116 extern ret_t
rtl8367c_getAsicLutIpMulticastVidLookup(rtk_uint32
* pEnabled
);
117 extern ret_t
rtl8367c_setAsicLutAgeTimerSpeed(rtk_uint32 timer
, rtk_uint32 speed
);
118 extern ret_t
rtl8367c_getAsicLutAgeTimerSpeed(rtk_uint32
* pTimer
, rtk_uint32
* pSpeed
);
119 extern ret_t
rtl8367c_setAsicLutCamTbUsage(rtk_uint32 enabled
);
120 extern ret_t
rtl8367c_getAsicLutCamTbUsage(rtk_uint32
* pEnabled
);
121 extern ret_t
rtl8367c_getAsicLutCamType(rtk_uint32
* pType
);
122 extern ret_t
rtl8367c_setAsicLutLearnLimitNo(rtk_uint32 port
, rtk_uint32 number
);
123 extern ret_t
rtl8367c_getAsicLutLearnLimitNo(rtk_uint32 port
, rtk_uint32
* pNumber
);
124 extern ret_t
rtl8367c_setAsicSystemLutLearnLimitNo(rtk_uint32 number
);
125 extern ret_t
rtl8367c_getAsicSystemLutLearnLimitNo(rtk_uint32
*pNumber
);
126 extern ret_t
rtl8367c_setAsicLutLearnOverAct(rtk_uint32 action
);
127 extern ret_t
rtl8367c_getAsicLutLearnOverAct(rtk_uint32
* pAction
);
128 extern ret_t
rtl8367c_setAsicSystemLutLearnOverAct(rtk_uint32 action
);
129 extern ret_t
rtl8367c_getAsicSystemLutLearnOverAct(rtk_uint32
*pAction
);
130 extern ret_t
rtl8367c_setAsicSystemLutLearnPortMask(rtk_uint32 portmask
);
131 extern ret_t
rtl8367c_getAsicSystemLutLearnPortMask(rtk_uint32
*pPortmask
);
132 extern ret_t
rtl8367c_setAsicL2LookupTb(rtl8367c_luttb
*pL2Table
);
133 extern ret_t
rtl8367c_getAsicL2LookupTb(rtk_uint32 method
, rtl8367c_luttb
*pL2Table
);
134 extern ret_t
rtl8367c_getAsicLutLearnNo(rtk_uint32 port
, rtk_uint32
* pNumber
);
135 extern ret_t
rtl8367c_setAsicLutIpLookupMethod(rtk_uint32 type
);
136 extern ret_t
rtl8367c_getAsicLutIpLookupMethod(rtk_uint32
* pType
);
137 extern ret_t
rtl8367c_setAsicLutForceFlush(rtk_uint32 portmask
);
138 extern ret_t
rtl8367c_getAsicLutForceFlushStatus(rtk_uint32
*pPortmask
);
139 extern ret_t
rtl8367c_setAsicLutFlushMode(rtk_uint32 mode
);
140 extern ret_t
rtl8367c_getAsicLutFlushMode(rtk_uint32
* pMode
);
141 extern ret_t
rtl8367c_setAsicLutFlushType(rtk_uint32 type
);
142 extern ret_t
rtl8367c_getAsicLutFlushType(rtk_uint32
* pType
);
143 extern ret_t
rtl8367c_setAsicLutFlushVid(rtk_uint32 vid
);
144 extern ret_t
rtl8367c_getAsicLutFlushVid(rtk_uint32
* pVid
);
145 extern ret_t
rtl8367c_setAsicLutFlushFid(rtk_uint32 fid
);
146 extern ret_t
rtl8367c_getAsicLutFlushFid(rtk_uint32
* pFid
);
147 extern ret_t
rtl8367c_setAsicLutDisableAging(rtk_uint32 port
, rtk_uint32 disabled
);
148 extern ret_t
rtl8367c_getAsicLutDisableAging(rtk_uint32 port
, rtk_uint32
*pDisabled
);
149 extern ret_t
rtl8367c_setAsicLutIPMCGroup(rtk_uint32 index
, ipaddr_t group_addr
, rtk_uint32 vid
, rtk_uint32 pmask
, rtk_uint32 valid
);
150 extern ret_t
rtl8367c_getAsicLutIPMCGroup(rtk_uint32 index
, ipaddr_t
*pGroup_addr
, rtk_uint32
*pVid
, rtk_uint32
*pPmask
, rtk_uint32
*pValid
);
151 extern ret_t
rtl8367c_setAsicLutLinkDownForceAging(rtk_uint32 enable
);
152 extern ret_t
rtl8367c_getAsicLutLinkDownForceAging(rtk_uint32
*pEnable
);
153 extern ret_t
rtl8367c_setAsicLutFlushAll(void);
154 extern ret_t
rtl8367c_getAsicLutFlushAllStatus(rtk_uint32
*pBusyStatus
);
155 extern ret_t
rtl8367c_setAsicLutIpmcFwdRouterPort(rtk_uint32 enable
);
156 extern ret_t
rtl8367c_getAsicLutIpmcFwdRouterPort(rtk_uint32
*pEnable
);
158 #endif /*_RTL8367C_ASICDRV_LUT_H_*/