mediatek: add support for rtl8367c
[openwrt/staging/rmilecki.git] / target / linux / mediatek / files-5.4 / drivers / net / phy / rtk / rtl8367c / include / rtl8367c_asicdrv_port.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: 76333 $
11 * $Date: 2017-03-09 09:33:15 +0800 (¶g¥|, 09 ¤T¤ë 2017) $
12 *
13 * Purpose : RTL8367C switch high-level API for RTL8367C
14 * Feature : Port security related functions
15 *
16 */
17
18 #ifndef _RTL8367C_ASICDRV_PORTSECURITY_H_
19 #define _RTL8367C_ASICDRV_PORTSECURITY_H_
20
21 #include <rtl8367c_asicdrv.h>
22 #include <rtl8367c_asicdrv_unknownMulticast.h>
23 #include <rtl8367c_asicdrv_phy.h>
24
25 /****************************************************************/
26 /* Type Definition */
27 /****************************************************************/
28
29 #define RTL8367C_MAC7 7
30 #define RTL8367C_EXTNO 3
31
32 #define RTL8367C_RTCT_PAGE (11)
33 #define RTL8367C_RTCT_RESULT_A_REG (27)
34 #define RTL8367C_RTCT_RESULT_B_REG (28)
35 #define RTL8367C_RTCT_RESULT_C_REG (29)
36 #define RTL8367C_RTCT_RESULT_D_REG (30)
37 #define RTL8367C_RTCT_STATUS_REG (26)
38
39 enum L2_SECURITY_BEHAVE
40 {
41 L2_BEHAVE_FLOODING = 0,
42 L2_BEHAVE_DROP,
43 L2_BEHAVE_TRAP,
44 L2_BEHAVE_END
45 };
46
47 enum L2_UNDA_BEHAVE
48 {
49 L2_UNDA_BEHAVE_FLOODING_PMASK = 0,
50 L2_UNDA_BEHAVE_DROP,
51 L2_UNDA_BEHAVE_TRAP,
52 L2_UNDA_BEHAVE_FLOODING,
53 L2_UNDA_BEHAVE_END
54 };
55
56 enum L2_SECURITY_SA_BEHAVE
57 {
58 L2_BEHAVE_SA_FLOODING = 0,
59 L2_BEHAVE_SA_DROP,
60 L2_BEHAVE_SA_TRAP,
61 L2_BEHAVE_SA_COPY28051,
62 L2_BEHAVE_SA_END
63 };
64
65 /* enum for port current link speed */
66 enum SPEEDMODE
67 {
68 SPD_10M = 0,
69 SPD_100M,
70 SPD_1000M,
71 SPD_2500M
72 };
73
74 /* enum for mac link mode */
75 enum LINKMODE
76 {
77 MAC_NORMAL = 0,
78 MAC_FORCE,
79 };
80
81 /* enum for port current link duplex mode */
82 enum DUPLEXMODE
83 {
84 HALF_DUPLEX = 0,
85 FULL_DUPLEX
86 };
87
88 /* enum for port current MST mode */
89 enum MSTMODE
90 {
91 SLAVE_MODE= 0,
92 MASTER_MODE
93 };
94
95
96 enum EXTMODE
97 {
98 EXT_DISABLE = 0,
99 EXT_RGMII,
100 EXT_MII_MAC,
101 EXT_MII_PHY,
102 EXT_TMII_MAC,
103 EXT_TMII_PHY,
104 EXT_GMII,
105 EXT_RMII_MAC,
106 EXT_RMII_PHY,
107 EXT_SGMII,
108 EXT_HSGMII,
109 EXT_1000X_100FX,
110 EXT_1000X,
111 EXT_100FX,
112 EXT_RGMII_2,
113 EXT_MII_MAC_2,
114 EXT_MII_PHY_2,
115 EXT_TMII_MAC_2,
116 EXT_TMII_PHY_2,
117 EXT_RMII_MAC_2,
118 EXT_RMII_PHY_2,
119 EXT_END
120 };
121
122 enum DOSTYPE
123 {
124 DOS_DAEQSA = 0,
125 DOS_LANDATTACKS,
126 DOS_BLATATTACKS,
127 DOS_SYNFINSCAN,
128 DOS_XMASCAN,
129 DOS_NULLSCAN,
130 DOS_SYN1024,
131 DOS_TCPSHORTHDR,
132 DOS_TCPFRAGERROR,
133 DOS_ICMPFRAGMENT,
134 DOS_END,
135
136 };
137
138 typedef struct rtl8367c_port_ability_s{
139 rtk_uint16 forcemode;
140 rtk_uint16 mstfault;
141 rtk_uint16 mstmode;
142 rtk_uint16 nway;
143 rtk_uint16 txpause;
144 rtk_uint16 rxpause;
145 rtk_uint16 link;
146 rtk_uint16 duplex;
147 rtk_uint16 speed;
148 }rtl8367c_port_ability_t;
149
150 typedef struct rtl8367c_port_status_s{
151
152 rtk_uint16 lpi1000;
153 rtk_uint16 lpi100;
154 rtk_uint16 mstfault;
155 rtk_uint16 mstmode;
156 rtk_uint16 nway;
157 rtk_uint16 txpause;
158 rtk_uint16 rxpause;
159 rtk_uint16 link;
160 rtk_uint16 duplex;
161 rtk_uint16 speed;
162
163 }rtl8367c_port_status_t;
164
165 typedef struct rtct_result_s
166 {
167 rtk_uint32 channelAShort;
168 rtk_uint32 channelBShort;
169 rtk_uint32 channelCShort;
170 rtk_uint32 channelDShort;
171
172 rtk_uint32 channelAOpen;
173 rtk_uint32 channelBOpen;
174 rtk_uint32 channelCOpen;
175 rtk_uint32 channelDOpen;
176
177 rtk_uint32 channelAMismatch;
178 rtk_uint32 channelBMismatch;
179 rtk_uint32 channelCMismatch;
180 rtk_uint32 channelDMismatch;
181
182 rtk_uint32 channelALinedriver;
183 rtk_uint32 channelBLinedriver;
184 rtk_uint32 channelCLinedriver;
185 rtk_uint32 channelDLinedriver;
186
187 rtk_uint32 channelALen;
188 rtk_uint32 channelBLen;
189 rtk_uint32 channelCLen;
190 rtk_uint32 channelDLen;
191 } rtl8367c_port_rtct_result_t;
192
193
194 /****************************************************************/
195 /* Driver Proto Type Definition */
196 /****************************************************************/
197 extern ret_t rtl8367c_setAsicPortUnknownDaBehavior(rtk_uint32 port, rtk_uint32 behavior);
198 extern ret_t rtl8367c_getAsicPortUnknownDaBehavior(rtk_uint32 port, rtk_uint32 *pBehavior);
199 extern ret_t rtl8367c_setAsicPortUnknownSaBehavior(rtk_uint32 behavior);
200 extern ret_t rtl8367c_getAsicPortUnknownSaBehavior(rtk_uint32 *pBehavior);
201 extern ret_t rtl8367c_setAsicPortUnmatchedSaBehavior(rtk_uint32 behavior);
202 extern ret_t rtl8367c_getAsicPortUnmatchedSaBehavior(rtk_uint32 *pBehavior);
203 extern ret_t rtl8367c_setAsicPortUnmatchedSaMoving(rtk_uint32 port, rtk_uint32 enabled);
204 extern ret_t rtl8367c_getAsicPortUnmatchedSaMoving(rtk_uint32 port, rtk_uint32 *pEnabled);
205 extern ret_t rtl8367c_setAsicPortUnknownDaFloodingPortmask(rtk_uint32 portmask);
206 extern ret_t rtl8367c_getAsicPortUnknownDaFloodingPortmask(rtk_uint32 *pPortmask);
207 extern ret_t rtl8367c_setAsicPortUnknownMulticastFloodingPortmask(rtk_uint32 portmask);
208 extern ret_t rtl8367c_getAsicPortUnknownMulticastFloodingPortmask(rtk_uint32 *pPortmask);
209 extern ret_t rtl8367c_setAsicPortBcastFloodingPortmask(rtk_uint32 portmask);
210 extern ret_t rtl8367c_getAsicPortBcastFloodingPortmask(rtk_uint32 *pPortmask);
211 extern ret_t rtl8367c_setAsicPortBlockSpa(rtk_uint32 port, rtk_uint32 block);
212 extern ret_t rtl8367c_getAsicPortBlockSpa(rtk_uint32 port, rtk_uint32 *pBlock);
213 extern ret_t rtl8367c_setAsicPortForceLink(rtk_uint32 port, rtl8367c_port_ability_t *pPortAbility);
214 extern ret_t rtl8367c_getAsicPortForceLink(rtk_uint32 port, rtl8367c_port_ability_t *pPortAbility);
215 extern ret_t rtl8367c_getAsicPortStatus(rtk_uint32 port, rtl8367c_port_status_t *pPortStatus);
216 extern ret_t rtl8367c_setAsicPortForceLinkExt(rtk_uint32 id, rtl8367c_port_ability_t *pPortAbility);
217 extern ret_t rtl8367c_getAsicPortForceLinkExt(rtk_uint32 id, rtl8367c_port_ability_t *pPortAbility);
218 extern ret_t rtl8367c_setAsicPortExtMode(rtk_uint32 id, rtk_uint32 mode);
219 extern ret_t rtl8367c_getAsicPortExtMode(rtk_uint32 id, rtk_uint32 *pMode);
220 extern ret_t rtl8367c_setAsicPortDos(rtk_uint32 type, rtk_uint32 drop);
221 extern ret_t rtl8367c_getAsicPortDos(rtk_uint32 type, rtk_uint32* pDrop);
222 extern ret_t rtl8367c_setAsicPortEnableAll(rtk_uint32 enable);
223 extern ret_t rtl8367c_getAsicPortEnableAll(rtk_uint32 *pEnable);
224 extern ret_t rtl8367c_setAsicPortSmallIpg(rtk_uint32 port, rtk_uint32 enable);
225 extern ret_t rtl8367c_getAsicPortSmallIpg(rtk_uint32 port, rtk_uint32* pEnable);
226 extern ret_t rtl8367c_setAsicPortLoopback(rtk_uint32 port, rtk_uint32 enable);
227 extern ret_t rtl8367c_getAsicPortLoopback(rtk_uint32 port, rtk_uint32 *pEnable);
228 extern ret_t rtl8367c_setAsicPortRTCTEnable(rtk_uint32 portmask);
229 extern ret_t rtl8367c_setAsicPortRTCTDisable(rtk_uint32 portmask);
230 extern ret_t rtl8367c_getAsicPortRTCTResult(rtk_uint32 port, rtl8367c_port_rtct_result_t *pResult);
231 extern ret_t rtl8367c_sdsReset(rtk_uint32 id);
232 extern ret_t rtl8367c_getSdsLinkStatus(rtk_uint32 ext_id, rtk_uint32 *pSignalDetect, rtk_uint32 *pSync, rtk_uint32 *pLink);
233 extern ret_t rtl8367c_setSgmiiNway(rtk_uint32 ext_id, rtk_uint32 state);
234 extern ret_t rtl8367c_getSgmiiNway(rtk_uint32 ext_id, rtk_uint32 *pState);
235
236 #endif /*_RTL8367C_ASICDRV_PORTSECURITY_H_*/
237