mediatek: add patches for 5.15 and kernel config for mt7622
[openwrt/openwrt.git] / target / linux / mediatek / files / drivers / net / phy / rtk / rtl8367c / include / rtl8367c_asicdrv_lut.h
1 /*
2 * Copyright (C) 2013 Realtek Semiconductor Corp.
3 * All Rights Reserved.
4 *
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
9 *
10 * $Revision: 76306 $
11 * $Date: 2017-03-08 15:13:58 +0800 (¶g¤T, 08 ¤T¤ë 2017) $
12 *
13 * Purpose : RTL8367C switch high-level API for RTL8367C
14 * Feature : LUT related functions
15 *
16 */
17
18
19 #ifndef _RTL8367C_ASICDRV_LUT_H_
20 #define _RTL8367C_ASICDRV_LUT_H_
21
22 #include <rtl8367c_asicdrv.h>
23
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)
31
32 #define RTL8367C_LUT_TABLE_SIZE (6)
33
34 enum RTL8367C_LUTHASHMETHOD{
35
36 LUTHASHMETHOD_SVL=0,
37 LUTHASHMETHOD_IVL,
38 LUTHASHMETHOD_END,
39 };
40
41
42 enum RTL8367C_LRNOVERACT{
43
44 LRNOVERACT_FORWARD=0,
45 LRNOVERACT_DROP,
46 LRNOVERACT_TRAP,
47 LRNOVERACT_END,
48 };
49
50 enum RTL8367C_LUTREADMETHOD{
51
52 LUTREADMETHOD_MAC =0,
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,
60 };
61
62 enum RTL8367C_FLUSHMODE
63 {
64 FLUSHMDOE_PORT = 0,
65 FLUSHMDOE_VID,
66 FLUSHMDOE_FID,
67 FLUSHMDOE_END,
68 };
69
70 enum RTL8367C_FLUSHTYPE
71 {
72 FLUSHTYPE_DYNAMIC = 0,
73 FLUSHTYPE_BOTH,
74 FLUSHTYPE_END,
75 };
76
77
78 typedef struct LUTTABLE{
79
80 ipaddr_t sip;
81 ipaddr_t dip;
82 ether_addr_t mac;
83 rtk_uint16 ivl_svl:1;
84 rtk_uint16 cvid_fid:12;
85 rtk_uint16 fid:4;
86 rtk_uint16 efid:3;
87
88 rtk_uint16 nosalearn:1;
89 rtk_uint16 da_block:1;
90 rtk_uint16 sa_block:1;
91 rtk_uint16 auth:1;
92 rtk_uint16 lut_pri:3;
93 rtk_uint16 sa_en:1;
94 rtk_uint16 fwd_en:1;
95 rtk_uint16 mbr:11;
96 rtk_uint16 spa:4;
97 rtk_uint16 age:3;
98 rtk_uint16 l3lookup:1;
99 rtk_uint16 igmp_asic:1;
100 rtk_uint16 igmpidx:8;
101
102 rtk_uint16 lookup_hit:1;
103 rtk_uint16 lookup_busy:1;
104 rtk_uint16 address:13;
105
106 rtk_uint16 l3vidlookup:1;
107 rtk_uint16 l3_vid:12;
108
109 rtk_uint16 wait_time;
110
111 }rtl8367c_luttb;
112
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);
157
158 #endif /*_RTL8367C_ASICDRV_LUT_H_*/
159