xref: /openbmc/linux/drivers/net/ethernet/micrel/ksz884x.c (revision 9df839a711aee437390b16ee39cf0b5c1620be6a)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * drivers/net/ethernet/micrel/ksx884x.c - Micrel KSZ8841/2 PCI Ethernet driver
4  *
5  * Copyright (c) 2009-2010 Micrel, Inc.
6  * 	Tristram Ha <Tristram.Ha@micrel.com>
7  */
8 
9 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
10 
11 #include <linux/init.h>
12 #include <linux/interrupt.h>
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/ioport.h>
16 #include <linux/pci.h>
17 #include <linux/proc_fs.h>
18 #include <linux/mii.h>
19 #include <linux/platform_device.h>
20 #include <linux/ethtool.h>
21 #include <linux/etherdevice.h>
22 #include <linux/in.h>
23 #include <linux/ip.h>
24 #include <linux/if_vlan.h>
25 #include <linux/crc32.h>
26 #include <linux/sched.h>
27 #include <linux/slab.h>
28 #include <linux/micrel_phy.h>
29 
30 
31 /* DMA Registers */
32 
33 #define KS_DMA_TX_CTRL			0x0000
34 #define DMA_TX_ENABLE			0x00000001
35 #define DMA_TX_CRC_ENABLE		0x00000002
36 #define DMA_TX_PAD_ENABLE		0x00000004
37 #define DMA_TX_LOOPBACK			0x00000100
38 #define DMA_TX_FLOW_ENABLE		0x00000200
39 #define DMA_TX_CSUM_IP			0x00010000
40 #define DMA_TX_CSUM_TCP			0x00020000
41 #define DMA_TX_CSUM_UDP			0x00040000
42 #define DMA_TX_BURST_SIZE		0x3F000000
43 
44 #define KS_DMA_RX_CTRL			0x0004
45 #define DMA_RX_ENABLE			0x00000001
46 #define KS884X_DMA_RX_MULTICAST		0x00000002
47 #define DMA_RX_PROMISCUOUS		0x00000004
48 #define DMA_RX_ERROR			0x00000008
49 #define DMA_RX_UNICAST			0x00000010
50 #define DMA_RX_ALL_MULTICAST		0x00000020
51 #define DMA_RX_BROADCAST		0x00000040
52 #define DMA_RX_FLOW_ENABLE		0x00000200
53 #define DMA_RX_CSUM_IP			0x00010000
54 #define DMA_RX_CSUM_TCP			0x00020000
55 #define DMA_RX_CSUM_UDP			0x00040000
56 #define DMA_RX_BURST_SIZE		0x3F000000
57 
58 #define DMA_BURST_SHIFT			24
59 #define DMA_BURST_DEFAULT		8
60 
61 #define KS_DMA_TX_START			0x0008
62 #define KS_DMA_RX_START			0x000C
63 #define DMA_START			0x00000001
64 
65 #define KS_DMA_TX_ADDR			0x0010
66 #define KS_DMA_RX_ADDR			0x0014
67 
68 #define DMA_ADDR_LIST_MASK		0xFFFFFFFC
69 #define DMA_ADDR_LIST_SHIFT		2
70 
71 /* MTR0 */
72 #define KS884X_MULTICAST_0_OFFSET	0x0020
73 #define KS884X_MULTICAST_1_OFFSET	0x0021
74 #define KS884X_MULTICAST_2_OFFSET	0x0022
75 #define KS884x_MULTICAST_3_OFFSET	0x0023
76 /* MTR1 */
77 #define KS884X_MULTICAST_4_OFFSET	0x0024
78 #define KS884X_MULTICAST_5_OFFSET	0x0025
79 #define KS884X_MULTICAST_6_OFFSET	0x0026
80 #define KS884X_MULTICAST_7_OFFSET	0x0027
81 
82 /* Interrupt Registers */
83 
84 /* INTEN */
85 #define KS884X_INTERRUPTS_ENABLE	0x0028
86 /* INTST */
87 #define KS884X_INTERRUPTS_STATUS	0x002C
88 
89 #define KS884X_INT_RX_STOPPED		0x02000000
90 #define KS884X_INT_TX_STOPPED		0x04000000
91 #define KS884X_INT_RX_OVERRUN		0x08000000
92 #define KS884X_INT_TX_EMPTY		0x10000000
93 #define KS884X_INT_RX			0x20000000
94 #define KS884X_INT_TX			0x40000000
95 #define KS884X_INT_PHY			0x80000000
96 
97 #define KS884X_INT_RX_MASK		\
98 	(KS884X_INT_RX | KS884X_INT_RX_OVERRUN)
99 #define KS884X_INT_TX_MASK		\
100 	(KS884X_INT_TX | KS884X_INT_TX_EMPTY)
101 #define KS884X_INT_MASK	(KS884X_INT_RX | KS884X_INT_TX | KS884X_INT_PHY)
102 
103 /* MAC Additional Station Address */
104 
105 /* MAAL0 */
106 #define KS_ADD_ADDR_0_LO		0x0080
107 /* MAAH0 */
108 #define KS_ADD_ADDR_0_HI		0x0084
109 /* MAAL1 */
110 #define KS_ADD_ADDR_1_LO		0x0088
111 /* MAAH1 */
112 #define KS_ADD_ADDR_1_HI		0x008C
113 /* MAAL2 */
114 #define KS_ADD_ADDR_2_LO		0x0090
115 /* MAAH2 */
116 #define KS_ADD_ADDR_2_HI		0x0094
117 /* MAAL3 */
118 #define KS_ADD_ADDR_3_LO		0x0098
119 /* MAAH3 */
120 #define KS_ADD_ADDR_3_HI		0x009C
121 /* MAAL4 */
122 #define KS_ADD_ADDR_4_LO		0x00A0
123 /* MAAH4 */
124 #define KS_ADD_ADDR_4_HI		0x00A4
125 /* MAAL5 */
126 #define KS_ADD_ADDR_5_LO		0x00A8
127 /* MAAH5 */
128 #define KS_ADD_ADDR_5_HI		0x00AC
129 /* MAAL6 */
130 #define KS_ADD_ADDR_6_LO		0x00B0
131 /* MAAH6 */
132 #define KS_ADD_ADDR_6_HI		0x00B4
133 /* MAAL7 */
134 #define KS_ADD_ADDR_7_LO		0x00B8
135 /* MAAH7 */
136 #define KS_ADD_ADDR_7_HI		0x00BC
137 /* MAAL8 */
138 #define KS_ADD_ADDR_8_LO		0x00C0
139 /* MAAH8 */
140 #define KS_ADD_ADDR_8_HI		0x00C4
141 /* MAAL9 */
142 #define KS_ADD_ADDR_9_LO		0x00C8
143 /* MAAH9 */
144 #define KS_ADD_ADDR_9_HI		0x00CC
145 /* MAAL10 */
146 #define KS_ADD_ADDR_A_LO		0x00D0
147 /* MAAH10 */
148 #define KS_ADD_ADDR_A_HI		0x00D4
149 /* MAAL11 */
150 #define KS_ADD_ADDR_B_LO		0x00D8
151 /* MAAH11 */
152 #define KS_ADD_ADDR_B_HI		0x00DC
153 /* MAAL12 */
154 #define KS_ADD_ADDR_C_LO		0x00E0
155 /* MAAH12 */
156 #define KS_ADD_ADDR_C_HI		0x00E4
157 /* MAAL13 */
158 #define KS_ADD_ADDR_D_LO		0x00E8
159 /* MAAH13 */
160 #define KS_ADD_ADDR_D_HI		0x00EC
161 /* MAAL14 */
162 #define KS_ADD_ADDR_E_LO		0x00F0
163 /* MAAH14 */
164 #define KS_ADD_ADDR_E_HI		0x00F4
165 /* MAAL15 */
166 #define KS_ADD_ADDR_F_LO		0x00F8
167 /* MAAH15 */
168 #define KS_ADD_ADDR_F_HI		0x00FC
169 
170 #define ADD_ADDR_HI_MASK		0x0000FFFF
171 #define ADD_ADDR_ENABLE			0x80000000
172 #define ADD_ADDR_INCR			8
173 
174 /* Miscellaneous Registers */
175 
176 /* MARL */
177 #define KS884X_ADDR_0_OFFSET		0x0200
178 #define KS884X_ADDR_1_OFFSET		0x0201
179 /* MARM */
180 #define KS884X_ADDR_2_OFFSET		0x0202
181 #define KS884X_ADDR_3_OFFSET		0x0203
182 /* MARH */
183 #define KS884X_ADDR_4_OFFSET		0x0204
184 #define KS884X_ADDR_5_OFFSET		0x0205
185 
186 /* OBCR */
187 #define KS884X_BUS_CTRL_OFFSET		0x0210
188 
189 #define BUS_SPEED_125_MHZ		0x0000
190 #define BUS_SPEED_62_5_MHZ		0x0001
191 #define BUS_SPEED_41_66_MHZ		0x0002
192 #define BUS_SPEED_25_MHZ		0x0003
193 
194 /* EEPCR */
195 #define KS884X_EEPROM_CTRL_OFFSET	0x0212
196 
197 #define EEPROM_CHIP_SELECT		0x0001
198 #define EEPROM_SERIAL_CLOCK		0x0002
199 #define EEPROM_DATA_OUT			0x0004
200 #define EEPROM_DATA_IN			0x0008
201 #define EEPROM_ACCESS_ENABLE		0x0010
202 
203 /* MBIR */
204 #define KS884X_MEM_INFO_OFFSET		0x0214
205 
206 #define RX_MEM_TEST_FAILED		0x0008
207 #define RX_MEM_TEST_FINISHED		0x0010
208 #define TX_MEM_TEST_FAILED		0x0800
209 #define TX_MEM_TEST_FINISHED		0x1000
210 
211 /* GCR */
212 #define KS884X_GLOBAL_CTRL_OFFSET	0x0216
213 #define GLOBAL_SOFTWARE_RESET		0x0001
214 
215 #define KS8841_POWER_MANAGE_OFFSET	0x0218
216 
217 /* WFCR */
218 #define KS8841_WOL_CTRL_OFFSET		0x021A
219 #define KS8841_WOL_MAGIC_ENABLE		0x0080
220 #define KS8841_WOL_FRAME3_ENABLE	0x0008
221 #define KS8841_WOL_FRAME2_ENABLE	0x0004
222 #define KS8841_WOL_FRAME1_ENABLE	0x0002
223 #define KS8841_WOL_FRAME0_ENABLE	0x0001
224 
225 /* WF0 */
226 #define KS8841_WOL_FRAME_CRC_OFFSET	0x0220
227 #define KS8841_WOL_FRAME_BYTE0_OFFSET	0x0224
228 #define KS8841_WOL_FRAME_BYTE2_OFFSET	0x0228
229 
230 /* IACR */
231 #define KS884X_IACR_P			0x04A0
232 #define KS884X_IACR_OFFSET		KS884X_IACR_P
233 
234 /* IADR1 */
235 #define KS884X_IADR1_P			0x04A2
236 #define KS884X_IADR2_P			0x04A4
237 #define KS884X_IADR3_P			0x04A6
238 #define KS884X_IADR4_P			0x04A8
239 #define KS884X_IADR5_P			0x04AA
240 
241 #define KS884X_ACC_CTRL_SEL_OFFSET	KS884X_IACR_P
242 #define KS884X_ACC_CTRL_INDEX_OFFSET	(KS884X_ACC_CTRL_SEL_OFFSET + 1)
243 
244 #define KS884X_ACC_DATA_0_OFFSET	KS884X_IADR4_P
245 #define KS884X_ACC_DATA_1_OFFSET	(KS884X_ACC_DATA_0_OFFSET + 1)
246 #define KS884X_ACC_DATA_2_OFFSET	KS884X_IADR5_P
247 #define KS884X_ACC_DATA_3_OFFSET	(KS884X_ACC_DATA_2_OFFSET + 1)
248 #define KS884X_ACC_DATA_4_OFFSET	KS884X_IADR2_P
249 #define KS884X_ACC_DATA_5_OFFSET	(KS884X_ACC_DATA_4_OFFSET + 1)
250 #define KS884X_ACC_DATA_6_OFFSET	KS884X_IADR3_P
251 #define KS884X_ACC_DATA_7_OFFSET	(KS884X_ACC_DATA_6_OFFSET + 1)
252 #define KS884X_ACC_DATA_8_OFFSET	KS884X_IADR1_P
253 
254 /* P1MBCR */
255 #define KS884X_P1MBCR_P			0x04D0
256 #define KS884X_P1MBSR_P			0x04D2
257 #define KS884X_PHY1ILR_P		0x04D4
258 #define KS884X_PHY1IHR_P		0x04D6
259 #define KS884X_P1ANAR_P			0x04D8
260 #define KS884X_P1ANLPR_P		0x04DA
261 
262 /* P2MBCR */
263 #define KS884X_P2MBCR_P			0x04E0
264 #define KS884X_P2MBSR_P			0x04E2
265 #define KS884X_PHY2ILR_P		0x04E4
266 #define KS884X_PHY2IHR_P		0x04E6
267 #define KS884X_P2ANAR_P			0x04E8
268 #define KS884X_P2ANLPR_P		0x04EA
269 
270 #define KS884X_PHY_1_CTRL_OFFSET	KS884X_P1MBCR_P
271 #define PHY_CTRL_INTERVAL		(KS884X_P2MBCR_P - KS884X_P1MBCR_P)
272 
273 #define KS884X_PHY_CTRL_OFFSET		0x00
274 
275 #define KS884X_PHY_STATUS_OFFSET	0x02
276 
277 #define KS884X_PHY_ID_1_OFFSET		0x04
278 #define KS884X_PHY_ID_2_OFFSET		0x06
279 
280 #define KS884X_PHY_AUTO_NEG_OFFSET	0x08
281 
282 #define KS884X_PHY_REMOTE_CAP_OFFSET	0x0A
283 
284 /* P1VCT */
285 #define KS884X_P1VCT_P			0x04F0
286 #define KS884X_P1PHYCTRL_P		0x04F2
287 
288 /* P2VCT */
289 #define KS884X_P2VCT_P			0x04F4
290 #define KS884X_P2PHYCTRL_P		0x04F6
291 
292 #define KS884X_PHY_SPECIAL_OFFSET	KS884X_P1VCT_P
293 #define PHY_SPECIAL_INTERVAL		(KS884X_P2VCT_P - KS884X_P1VCT_P)
294 
295 #define KS884X_PHY_LINK_MD_OFFSET	0x00
296 
297 #define PHY_START_CABLE_DIAG		0x8000
298 #define PHY_CABLE_DIAG_RESULT		0x6000
299 #define PHY_CABLE_STAT_NORMAL		0x0000
300 #define PHY_CABLE_STAT_OPEN		0x2000
301 #define PHY_CABLE_STAT_SHORT		0x4000
302 #define PHY_CABLE_STAT_FAILED		0x6000
303 #define PHY_CABLE_10M_SHORT		0x1000
304 #define PHY_CABLE_FAULT_COUNTER		0x01FF
305 
306 #define KS884X_PHY_PHY_CTRL_OFFSET	0x02
307 
308 #define PHY_STAT_REVERSED_POLARITY	0x0020
309 #define PHY_STAT_MDIX			0x0010
310 #define PHY_FORCE_LINK			0x0008
311 #define PHY_POWER_SAVING_DISABLE	0x0004
312 #define PHY_REMOTE_LOOPBACK		0x0002
313 
314 /* SIDER */
315 #define KS884X_SIDER_P			0x0400
316 #define KS884X_CHIP_ID_OFFSET		KS884X_SIDER_P
317 #define KS884X_FAMILY_ID_OFFSET		(KS884X_CHIP_ID_OFFSET + 1)
318 
319 #define REG_FAMILY_ID			0x88
320 
321 #define REG_CHIP_ID_41			0x8810
322 #define REG_CHIP_ID_42			0x8800
323 
324 #define KS884X_CHIP_ID_MASK_41		0xFF10
325 #define KS884X_CHIP_ID_MASK		0xFFF0
326 #define KS884X_CHIP_ID_SHIFT		4
327 #define KS884X_REVISION_MASK		0x000E
328 #define KS884X_REVISION_SHIFT		1
329 #define KS8842_START			0x0001
330 
331 #define CHIP_IP_41_M			0x8810
332 #define CHIP_IP_42_M			0x8800
333 #define CHIP_IP_61_M			0x8890
334 #define CHIP_IP_62_M			0x8880
335 
336 #define CHIP_IP_41_P			0x8850
337 #define CHIP_IP_42_P			0x8840
338 #define CHIP_IP_61_P			0x88D0
339 #define CHIP_IP_62_P			0x88C0
340 
341 /* SGCR1 */
342 #define KS8842_SGCR1_P			0x0402
343 #define KS8842_SWITCH_CTRL_1_OFFSET	KS8842_SGCR1_P
344 
345 #define SWITCH_PASS_ALL			0x8000
346 #define SWITCH_TX_FLOW_CTRL		0x2000
347 #define SWITCH_RX_FLOW_CTRL		0x1000
348 #define SWITCH_CHECK_LENGTH		0x0800
349 #define SWITCH_AGING_ENABLE		0x0400
350 #define SWITCH_FAST_AGING		0x0200
351 #define SWITCH_AGGR_BACKOFF		0x0100
352 #define SWITCH_PASS_PAUSE		0x0008
353 #define SWITCH_LINK_AUTO_AGING		0x0001
354 
355 /* SGCR2 */
356 #define KS8842_SGCR2_P			0x0404
357 #define KS8842_SWITCH_CTRL_2_OFFSET	KS8842_SGCR2_P
358 
359 #define SWITCH_VLAN_ENABLE		0x8000
360 #define SWITCH_IGMP_SNOOP		0x4000
361 #define IPV6_MLD_SNOOP_ENABLE		0x2000
362 #define IPV6_MLD_SNOOP_OPTION		0x1000
363 #define PRIORITY_SCHEME_SELECT		0x0800
364 #define SWITCH_MIRROR_RX_TX		0x0100
365 #define UNICAST_VLAN_BOUNDARY		0x0080
366 #define MULTICAST_STORM_DISABLE		0x0040
367 #define SWITCH_BACK_PRESSURE		0x0020
368 #define FAIR_FLOW_CTRL			0x0010
369 #define NO_EXC_COLLISION_DROP		0x0008
370 #define SWITCH_HUGE_PACKET		0x0004
371 #define SWITCH_LEGAL_PACKET		0x0002
372 #define SWITCH_BUF_RESERVE		0x0001
373 
374 /* SGCR3 */
375 #define KS8842_SGCR3_P			0x0406
376 #define KS8842_SWITCH_CTRL_3_OFFSET	KS8842_SGCR3_P
377 
378 #define BROADCAST_STORM_RATE_LO		0xFF00
379 #define SWITCH_REPEATER			0x0080
380 #define SWITCH_HALF_DUPLEX		0x0040
381 #define SWITCH_FLOW_CTRL		0x0020
382 #define SWITCH_10_MBIT			0x0010
383 #define SWITCH_REPLACE_NULL_VID		0x0008
384 #define BROADCAST_STORM_RATE_HI		0x0007
385 
386 #define BROADCAST_STORM_RATE		0x07FF
387 
388 /* SGCR4 */
389 #define KS8842_SGCR4_P			0x0408
390 
391 /* SGCR5 */
392 #define KS8842_SGCR5_P			0x040A
393 #define KS8842_SWITCH_CTRL_5_OFFSET	KS8842_SGCR5_P
394 
395 #define LED_MODE			0x8200
396 #define LED_SPEED_DUPLEX_ACT		0x0000
397 #define LED_SPEED_DUPLEX_LINK_ACT	0x8000
398 #define LED_DUPLEX_10_100		0x0200
399 
400 /* SGCR6 */
401 #define KS8842_SGCR6_P			0x0410
402 #define KS8842_SWITCH_CTRL_6_OFFSET	KS8842_SGCR6_P
403 
404 #define KS8842_PRIORITY_MASK		3
405 #define KS8842_PRIORITY_SHIFT		2
406 
407 /* SGCR7 */
408 #define KS8842_SGCR7_P			0x0412
409 #define KS8842_SWITCH_CTRL_7_OFFSET	KS8842_SGCR7_P
410 
411 #define SWITCH_UNK_DEF_PORT_ENABLE	0x0008
412 #define SWITCH_UNK_DEF_PORT_3		0x0004
413 #define SWITCH_UNK_DEF_PORT_2		0x0002
414 #define SWITCH_UNK_DEF_PORT_1		0x0001
415 
416 /* MACAR1 */
417 #define KS8842_MACAR1_P			0x0470
418 #define KS8842_MACAR2_P			0x0472
419 #define KS8842_MACAR3_P			0x0474
420 #define KS8842_MAC_ADDR_1_OFFSET	KS8842_MACAR1_P
421 #define KS8842_MAC_ADDR_0_OFFSET	(KS8842_MAC_ADDR_1_OFFSET + 1)
422 #define KS8842_MAC_ADDR_3_OFFSET	KS8842_MACAR2_P
423 #define KS8842_MAC_ADDR_2_OFFSET	(KS8842_MAC_ADDR_3_OFFSET + 1)
424 #define KS8842_MAC_ADDR_5_OFFSET	KS8842_MACAR3_P
425 #define KS8842_MAC_ADDR_4_OFFSET	(KS8842_MAC_ADDR_5_OFFSET + 1)
426 
427 /* TOSR1 */
428 #define KS8842_TOSR1_P			0x0480
429 #define KS8842_TOSR2_P			0x0482
430 #define KS8842_TOSR3_P			0x0484
431 #define KS8842_TOSR4_P			0x0486
432 #define KS8842_TOSR5_P			0x0488
433 #define KS8842_TOSR6_P			0x048A
434 #define KS8842_TOSR7_P			0x0490
435 #define KS8842_TOSR8_P			0x0492
436 #define KS8842_TOS_1_OFFSET		KS8842_TOSR1_P
437 #define KS8842_TOS_2_OFFSET		KS8842_TOSR2_P
438 #define KS8842_TOS_3_OFFSET		KS8842_TOSR3_P
439 #define KS8842_TOS_4_OFFSET		KS8842_TOSR4_P
440 #define KS8842_TOS_5_OFFSET		KS8842_TOSR5_P
441 #define KS8842_TOS_6_OFFSET		KS8842_TOSR6_P
442 
443 #define KS8842_TOS_7_OFFSET		KS8842_TOSR7_P
444 #define KS8842_TOS_8_OFFSET		KS8842_TOSR8_P
445 
446 /* P1CR1 */
447 #define KS8842_P1CR1_P			0x0500
448 #define KS8842_P1CR2_P			0x0502
449 #define KS8842_P1VIDR_P			0x0504
450 #define KS8842_P1CR3_P			0x0506
451 #define KS8842_P1IRCR_P			0x0508
452 #define KS8842_P1ERCR_P			0x050A
453 #define KS884X_P1SCSLMD_P		0x0510
454 #define KS884X_P1CR4_P			0x0512
455 #define KS884X_P1SR_P			0x0514
456 
457 /* P2CR1 */
458 #define KS8842_P2CR1_P			0x0520
459 #define KS8842_P2CR2_P			0x0522
460 #define KS8842_P2VIDR_P			0x0524
461 #define KS8842_P2CR3_P			0x0526
462 #define KS8842_P2IRCR_P			0x0528
463 #define KS8842_P2ERCR_P			0x052A
464 #define KS884X_P2SCSLMD_P		0x0530
465 #define KS884X_P2CR4_P			0x0532
466 #define KS884X_P2SR_P			0x0534
467 
468 /* P3CR1 */
469 #define KS8842_P3CR1_P			0x0540
470 #define KS8842_P3CR2_P			0x0542
471 #define KS8842_P3VIDR_P			0x0544
472 #define KS8842_P3CR3_P			0x0546
473 #define KS8842_P3IRCR_P			0x0548
474 #define KS8842_P3ERCR_P			0x054A
475 
476 #define KS8842_PORT_1_CTRL_1		KS8842_P1CR1_P
477 #define KS8842_PORT_2_CTRL_1		KS8842_P2CR1_P
478 #define KS8842_PORT_3_CTRL_1		KS8842_P3CR1_P
479 
480 #define PORT_CTRL_ADDR(port, addr)		\
481 	(addr = KS8842_PORT_1_CTRL_1 + (port) *	\
482 		(KS8842_PORT_2_CTRL_1 - KS8842_PORT_1_CTRL_1))
483 
484 #define KS8842_PORT_CTRL_1_OFFSET	0x00
485 
486 #define PORT_BROADCAST_STORM		0x0080
487 #define PORT_DIFFSERV_ENABLE		0x0040
488 #define PORT_802_1P_ENABLE		0x0020
489 #define PORT_BASED_PRIORITY_MASK	0x0018
490 #define PORT_BASED_PRIORITY_BASE	0x0003
491 #define PORT_BASED_PRIORITY_SHIFT	3
492 #define PORT_BASED_PRIORITY_0		0x0000
493 #define PORT_BASED_PRIORITY_1		0x0008
494 #define PORT_BASED_PRIORITY_2		0x0010
495 #define PORT_BASED_PRIORITY_3		0x0018
496 #define PORT_INSERT_TAG			0x0004
497 #define PORT_REMOVE_TAG			0x0002
498 #define PORT_PRIO_QUEUE_ENABLE		0x0001
499 
500 #define KS8842_PORT_CTRL_2_OFFSET	0x02
501 
502 #define PORT_INGRESS_VLAN_FILTER	0x4000
503 #define PORT_DISCARD_NON_VID		0x2000
504 #define PORT_FORCE_FLOW_CTRL		0x1000
505 #define PORT_BACK_PRESSURE		0x0800
506 #define PORT_TX_ENABLE			0x0400
507 #define PORT_RX_ENABLE			0x0200
508 #define PORT_LEARN_DISABLE		0x0100
509 #define PORT_MIRROR_SNIFFER		0x0080
510 #define PORT_MIRROR_RX			0x0040
511 #define PORT_MIRROR_TX			0x0020
512 #define PORT_USER_PRIORITY_CEILING	0x0008
513 #define PORT_VLAN_MEMBERSHIP		0x0007
514 
515 #define KS8842_PORT_CTRL_VID_OFFSET	0x04
516 
517 #define PORT_DEFAULT_VID		0x0001
518 
519 #define KS8842_PORT_CTRL_3_OFFSET	0x06
520 
521 #define PORT_INGRESS_LIMIT_MODE		0x000C
522 #define PORT_INGRESS_ALL		0x0000
523 #define PORT_INGRESS_UNICAST		0x0004
524 #define PORT_INGRESS_MULTICAST		0x0008
525 #define PORT_INGRESS_BROADCAST		0x000C
526 #define PORT_COUNT_IFG			0x0002
527 #define PORT_COUNT_PREAMBLE		0x0001
528 
529 #define KS8842_PORT_IN_RATE_OFFSET	0x08
530 #define KS8842_PORT_OUT_RATE_OFFSET	0x0A
531 
532 #define PORT_PRIORITY_RATE		0x0F
533 #define PORT_PRIORITY_RATE_SHIFT	4
534 
535 #define KS884X_PORT_LINK_MD		0x10
536 
537 #define PORT_CABLE_10M_SHORT		0x8000
538 #define PORT_CABLE_DIAG_RESULT		0x6000
539 #define PORT_CABLE_STAT_NORMAL		0x0000
540 #define PORT_CABLE_STAT_OPEN		0x2000
541 #define PORT_CABLE_STAT_SHORT		0x4000
542 #define PORT_CABLE_STAT_FAILED		0x6000
543 #define PORT_START_CABLE_DIAG		0x1000
544 #define PORT_FORCE_LINK			0x0800
545 #define PORT_POWER_SAVING_DISABLE	0x0400
546 #define PORT_PHY_REMOTE_LOOPBACK	0x0200
547 #define PORT_CABLE_FAULT_COUNTER	0x01FF
548 
549 #define KS884X_PORT_CTRL_4_OFFSET	0x12
550 
551 #define PORT_LED_OFF			0x8000
552 #define PORT_TX_DISABLE			0x4000
553 #define PORT_AUTO_NEG_RESTART		0x2000
554 #define PORT_REMOTE_FAULT_DISABLE	0x1000
555 #define PORT_POWER_DOWN			0x0800
556 #define PORT_AUTO_MDIX_DISABLE		0x0400
557 #define PORT_FORCE_MDIX			0x0200
558 #define PORT_LOOPBACK			0x0100
559 #define PORT_AUTO_NEG_ENABLE		0x0080
560 #define PORT_FORCE_100_MBIT		0x0040
561 #define PORT_FORCE_FULL_DUPLEX		0x0020
562 #define PORT_AUTO_NEG_SYM_PAUSE		0x0010
563 #define PORT_AUTO_NEG_100BTX_FD		0x0008
564 #define PORT_AUTO_NEG_100BTX		0x0004
565 #define PORT_AUTO_NEG_10BT_FD		0x0002
566 #define PORT_AUTO_NEG_10BT		0x0001
567 
568 #define KS884X_PORT_STATUS_OFFSET	0x14
569 
570 #define PORT_HP_MDIX			0x8000
571 #define PORT_REVERSED_POLARITY		0x2000
572 #define PORT_RX_FLOW_CTRL		0x0800
573 #define PORT_TX_FLOW_CTRL		0x1000
574 #define PORT_STATUS_SPEED_100MBIT	0x0400
575 #define PORT_STATUS_FULL_DUPLEX		0x0200
576 #define PORT_REMOTE_FAULT		0x0100
577 #define PORT_MDIX_STATUS		0x0080
578 #define PORT_AUTO_NEG_COMPLETE		0x0040
579 #define PORT_STATUS_LINK_GOOD		0x0020
580 #define PORT_REMOTE_SYM_PAUSE		0x0010
581 #define PORT_REMOTE_100BTX_FD		0x0008
582 #define PORT_REMOTE_100BTX		0x0004
583 #define PORT_REMOTE_10BT_FD		0x0002
584 #define PORT_REMOTE_10BT		0x0001
585 
586 /*
587 #define STATIC_MAC_TABLE_ADDR		00-0000FFFF-FFFFFFFF
588 #define STATIC_MAC_TABLE_FWD_PORTS	00-00070000-00000000
589 #define STATIC_MAC_TABLE_VALID		00-00080000-00000000
590 #define STATIC_MAC_TABLE_OVERRIDE	00-00100000-00000000
591 #define STATIC_MAC_TABLE_USE_FID	00-00200000-00000000
592 #define STATIC_MAC_TABLE_FID		00-03C00000-00000000
593 */
594 
595 #define STATIC_MAC_TABLE_ADDR		0x0000FFFF
596 #define STATIC_MAC_TABLE_FWD_PORTS	0x00070000
597 #define STATIC_MAC_TABLE_VALID		0x00080000
598 #define STATIC_MAC_TABLE_OVERRIDE	0x00100000
599 #define STATIC_MAC_TABLE_USE_FID	0x00200000
600 #define STATIC_MAC_TABLE_FID		0x03C00000
601 
602 #define STATIC_MAC_FWD_PORTS_SHIFT	16
603 #define STATIC_MAC_FID_SHIFT		22
604 
605 /*
606 #define VLAN_TABLE_VID			00-00000000-00000FFF
607 #define VLAN_TABLE_FID			00-00000000-0000F000
608 #define VLAN_TABLE_MEMBERSHIP		00-00000000-00070000
609 #define VLAN_TABLE_VALID		00-00000000-00080000
610 */
611 
612 #define VLAN_TABLE_VID			0x00000FFF
613 #define VLAN_TABLE_FID			0x0000F000
614 #define VLAN_TABLE_MEMBERSHIP		0x00070000
615 #define VLAN_TABLE_VALID		0x00080000
616 
617 #define VLAN_TABLE_FID_SHIFT		12
618 #define VLAN_TABLE_MEMBERSHIP_SHIFT	16
619 
620 /*
621 #define DYNAMIC_MAC_TABLE_ADDR		00-0000FFFF-FFFFFFFF
622 #define DYNAMIC_MAC_TABLE_FID		00-000F0000-00000000
623 #define DYNAMIC_MAC_TABLE_SRC_PORT	00-00300000-00000000
624 #define DYNAMIC_MAC_TABLE_TIMESTAMP	00-00C00000-00000000
625 #define DYNAMIC_MAC_TABLE_ENTRIES	03-FF000000-00000000
626 #define DYNAMIC_MAC_TABLE_MAC_EMPTY	04-00000000-00000000
627 #define DYNAMIC_MAC_TABLE_RESERVED	78-00000000-00000000
628 #define DYNAMIC_MAC_TABLE_NOT_READY	80-00000000-00000000
629 */
630 
631 #define DYNAMIC_MAC_TABLE_ADDR		0x0000FFFF
632 #define DYNAMIC_MAC_TABLE_FID		0x000F0000
633 #define DYNAMIC_MAC_TABLE_SRC_PORT	0x00300000
634 #define DYNAMIC_MAC_TABLE_TIMESTAMP	0x00C00000
635 #define DYNAMIC_MAC_TABLE_ENTRIES	0xFF000000
636 
637 #define DYNAMIC_MAC_TABLE_ENTRIES_H	0x03
638 #define DYNAMIC_MAC_TABLE_MAC_EMPTY	0x04
639 #define DYNAMIC_MAC_TABLE_RESERVED	0x78
640 #define DYNAMIC_MAC_TABLE_NOT_READY	0x80
641 
642 #define DYNAMIC_MAC_FID_SHIFT		16
643 #define DYNAMIC_MAC_SRC_PORT_SHIFT	20
644 #define DYNAMIC_MAC_TIMESTAMP_SHIFT	22
645 #define DYNAMIC_MAC_ENTRIES_SHIFT	24
646 #define DYNAMIC_MAC_ENTRIES_H_SHIFT	8
647 
648 /*
649 #define MIB_COUNTER_VALUE		00-00000000-3FFFFFFF
650 #define MIB_COUNTER_VALID		00-00000000-40000000
651 #define MIB_COUNTER_OVERFLOW		00-00000000-80000000
652 */
653 
654 #define MIB_COUNTER_VALUE		0x3FFFFFFF
655 #define MIB_COUNTER_VALID		0x40000000
656 #define MIB_COUNTER_OVERFLOW		0x80000000
657 
658 #define MIB_PACKET_DROPPED		0x0000FFFF
659 
660 #define KS_MIB_PACKET_DROPPED_TX_0	0x100
661 #define KS_MIB_PACKET_DROPPED_TX_1	0x101
662 #define KS_MIB_PACKET_DROPPED_TX	0x102
663 #define KS_MIB_PACKET_DROPPED_RX_0	0x103
664 #define KS_MIB_PACKET_DROPPED_RX_1	0x104
665 #define KS_MIB_PACKET_DROPPED_RX	0x105
666 
667 /* Change default LED mode. */
668 #define SET_DEFAULT_LED			LED_SPEED_DUPLEX_ACT
669 
670 #define MAC_ADDR_ORDER(i)		(ETH_ALEN - 1 - (i))
671 
672 #define MAX_ETHERNET_BODY_SIZE		1500
673 #define ETHERNET_HEADER_SIZE		(14 + VLAN_HLEN)
674 
675 #define MAX_ETHERNET_PACKET_SIZE	\
676 	(MAX_ETHERNET_BODY_SIZE + ETHERNET_HEADER_SIZE)
677 
678 #define REGULAR_RX_BUF_SIZE		(MAX_ETHERNET_PACKET_SIZE + 4)
679 #define MAX_RX_BUF_SIZE			(1912 + 4)
680 
681 #define ADDITIONAL_ENTRIES		16
682 #define MAX_MULTICAST_LIST		32
683 
684 #define HW_MULTICAST_SIZE		8
685 
686 #define HW_TO_DEV_PORT(port)		(port - 1)
687 
688 enum {
689 	media_connected,
690 	media_disconnected
691 };
692 
693 enum {
694 	OID_COUNTER_UNKOWN,
695 
696 	OID_COUNTER_FIRST,
697 
698 	/* total transmit errors */
699 	OID_COUNTER_XMIT_ERROR,
700 
701 	/* total receive errors */
702 	OID_COUNTER_RCV_ERROR,
703 
704 	OID_COUNTER_LAST
705 };
706 
707 /*
708  * Hardware descriptor definitions
709  */
710 
711 #define DESC_ALIGNMENT			16
712 #define BUFFER_ALIGNMENT		8
713 
714 #define NUM_OF_RX_DESC			64
715 #define NUM_OF_TX_DESC			64
716 
717 #define KS_DESC_RX_FRAME_LEN		0x000007FF
718 #define KS_DESC_RX_FRAME_TYPE		0x00008000
719 #define KS_DESC_RX_ERROR_CRC		0x00010000
720 #define KS_DESC_RX_ERROR_RUNT		0x00020000
721 #define KS_DESC_RX_ERROR_TOO_LONG	0x00040000
722 #define KS_DESC_RX_ERROR_PHY		0x00080000
723 #define KS884X_DESC_RX_PORT_MASK	0x00300000
724 #define KS_DESC_RX_MULTICAST		0x01000000
725 #define KS_DESC_RX_ERROR		0x02000000
726 #define KS_DESC_RX_ERROR_CSUM_UDP	0x04000000
727 #define KS_DESC_RX_ERROR_CSUM_TCP	0x08000000
728 #define KS_DESC_RX_ERROR_CSUM_IP	0x10000000
729 #define KS_DESC_RX_LAST			0x20000000
730 #define KS_DESC_RX_FIRST		0x40000000
731 #define KS_DESC_RX_ERROR_COND		\
732 	(KS_DESC_RX_ERROR_CRC |		\
733 	KS_DESC_RX_ERROR_RUNT |		\
734 	KS_DESC_RX_ERROR_PHY |		\
735 	KS_DESC_RX_ERROR_TOO_LONG)
736 
737 #define KS_DESC_HW_OWNED		0x80000000
738 
739 #define KS_DESC_BUF_SIZE		0x000007FF
740 #define KS884X_DESC_TX_PORT_MASK	0x00300000
741 #define KS_DESC_END_OF_RING		0x02000000
742 #define KS_DESC_TX_CSUM_GEN_UDP		0x04000000
743 #define KS_DESC_TX_CSUM_GEN_TCP		0x08000000
744 #define KS_DESC_TX_CSUM_GEN_IP		0x10000000
745 #define KS_DESC_TX_LAST			0x20000000
746 #define KS_DESC_TX_FIRST		0x40000000
747 #define KS_DESC_TX_INTERRUPT		0x80000000
748 
749 #define KS_DESC_PORT_SHIFT		20
750 
751 #define KS_DESC_RX_MASK			(KS_DESC_BUF_SIZE)
752 
753 #define KS_DESC_TX_MASK			\
754 	(KS_DESC_TX_INTERRUPT |		\
755 	KS_DESC_TX_FIRST |		\
756 	KS_DESC_TX_LAST |		\
757 	KS_DESC_TX_CSUM_GEN_IP |	\
758 	KS_DESC_TX_CSUM_GEN_TCP |	\
759 	KS_DESC_TX_CSUM_GEN_UDP |	\
760 	KS_DESC_BUF_SIZE)
761 
762 struct ksz_desc_rx_stat {
763 #ifdef __BIG_ENDIAN_BITFIELD
764 	u32 hw_owned:1;
765 	u32 first_desc:1;
766 	u32 last_desc:1;
767 	u32 csum_err_ip:1;
768 	u32 csum_err_tcp:1;
769 	u32 csum_err_udp:1;
770 	u32 error:1;
771 	u32 multicast:1;
772 	u32 src_port:4;
773 	u32 err_phy:1;
774 	u32 err_too_long:1;
775 	u32 err_runt:1;
776 	u32 err_crc:1;
777 	u32 frame_type:1;
778 	u32 reserved1:4;
779 	u32 frame_len:11;
780 #else
781 	u32 frame_len:11;
782 	u32 reserved1:4;
783 	u32 frame_type:1;
784 	u32 err_crc:1;
785 	u32 err_runt:1;
786 	u32 err_too_long:1;
787 	u32 err_phy:1;
788 	u32 src_port:4;
789 	u32 multicast:1;
790 	u32 error:1;
791 	u32 csum_err_udp:1;
792 	u32 csum_err_tcp:1;
793 	u32 csum_err_ip:1;
794 	u32 last_desc:1;
795 	u32 first_desc:1;
796 	u32 hw_owned:1;
797 #endif
798 };
799 
800 struct ksz_desc_tx_stat {
801 #ifdef __BIG_ENDIAN_BITFIELD
802 	u32 hw_owned:1;
803 	u32 reserved1:31;
804 #else
805 	u32 reserved1:31;
806 	u32 hw_owned:1;
807 #endif
808 };
809 
810 struct ksz_desc_rx_buf {
811 #ifdef __BIG_ENDIAN_BITFIELD
812 	u32 reserved4:6;
813 	u32 end_of_ring:1;
814 	u32 reserved3:14;
815 	u32 buf_size:11;
816 #else
817 	u32 buf_size:11;
818 	u32 reserved3:14;
819 	u32 end_of_ring:1;
820 	u32 reserved4:6;
821 #endif
822 };
823 
824 struct ksz_desc_tx_buf {
825 #ifdef __BIG_ENDIAN_BITFIELD
826 	u32 intr:1;
827 	u32 first_seg:1;
828 	u32 last_seg:1;
829 	u32 csum_gen_ip:1;
830 	u32 csum_gen_tcp:1;
831 	u32 csum_gen_udp:1;
832 	u32 end_of_ring:1;
833 	u32 reserved4:1;
834 	u32 dest_port:4;
835 	u32 reserved3:9;
836 	u32 buf_size:11;
837 #else
838 	u32 buf_size:11;
839 	u32 reserved3:9;
840 	u32 dest_port:4;
841 	u32 reserved4:1;
842 	u32 end_of_ring:1;
843 	u32 csum_gen_udp:1;
844 	u32 csum_gen_tcp:1;
845 	u32 csum_gen_ip:1;
846 	u32 last_seg:1;
847 	u32 first_seg:1;
848 	u32 intr:1;
849 #endif
850 };
851 
852 union desc_stat {
853 	struct ksz_desc_rx_stat rx;
854 	struct ksz_desc_tx_stat tx;
855 	u32 data;
856 };
857 
858 union desc_buf {
859 	struct ksz_desc_rx_buf rx;
860 	struct ksz_desc_tx_buf tx;
861 	u32 data;
862 };
863 
864 /**
865  * struct ksz_hw_desc - Hardware descriptor data structure
866  * @ctrl:	Descriptor control value.
867  * @buf:	Descriptor buffer value.
868  * @addr:	Physical address of memory buffer.
869  * @next:	Pointer to next hardware descriptor.
870  */
871 struct ksz_hw_desc {
872 	union desc_stat ctrl;
873 	union desc_buf buf;
874 	u32 addr;
875 	u32 next;
876 };
877 
878 /**
879  * struct ksz_sw_desc - Software descriptor data structure
880  * @ctrl:	Descriptor control value.
881  * @buf:	Descriptor buffer value.
882  * @buf_size:	Current buffers size value in hardware descriptor.
883  */
884 struct ksz_sw_desc {
885 	union desc_stat ctrl;
886 	union desc_buf buf;
887 	u32 buf_size;
888 };
889 
890 /**
891  * struct ksz_dma_buf - OS dependent DMA buffer data structure
892  * @skb:	Associated socket buffer.
893  * @dma:	Associated physical DMA address.
894  * @len:	Actual len used.
895  */
896 struct ksz_dma_buf {
897 	struct sk_buff *skb;
898 	dma_addr_t dma;
899 	int len;
900 };
901 
902 /**
903  * struct ksz_desc - Descriptor structure
904  * @phw:	Hardware descriptor pointer to uncached physical memory.
905  * @sw:		Cached memory to hold hardware descriptor values for
906  * 		manipulation.
907  * @dma_buf:	Operating system dependent data structure to hold physical
908  * 		memory buffer allocation information.
909  */
910 struct ksz_desc {
911 	struct ksz_hw_desc *phw;
912 	struct ksz_sw_desc sw;
913 	struct ksz_dma_buf dma_buf;
914 };
915 
916 #define DMA_BUFFER(desc)  ((struct ksz_dma_buf *)(&(desc)->dma_buf))
917 
918 /**
919  * struct ksz_desc_info - Descriptor information data structure
920  * @ring:	First descriptor in the ring.
921  * @cur:	Current descriptor being manipulated.
922  * @ring_virt:	First hardware descriptor in the ring.
923  * @ring_phys:	The physical address of the first descriptor of the ring.
924  * @size:	Size of hardware descriptor.
925  * @alloc:	Number of descriptors allocated.
926  * @avail:	Number of descriptors available for use.
927  * @last:	Index for last descriptor released to hardware.
928  * @next:	Index for next descriptor available for use.
929  * @mask:	Mask for index wrapping.
930  */
931 struct ksz_desc_info {
932 	struct ksz_desc *ring;
933 	struct ksz_desc *cur;
934 	struct ksz_hw_desc *ring_virt;
935 	u32 ring_phys;
936 	int size;
937 	int alloc;
938 	int avail;
939 	int last;
940 	int next;
941 	int mask;
942 };
943 
944 /*
945  * KSZ8842 switch definitions
946  */
947 
948 enum {
949 	TABLE_STATIC_MAC = 0,
950 	TABLE_VLAN,
951 	TABLE_DYNAMIC_MAC,
952 	TABLE_MIB
953 };
954 
955 #define LEARNED_MAC_TABLE_ENTRIES	1024
956 #define STATIC_MAC_TABLE_ENTRIES	8
957 
958 /**
959  * struct ksz_mac_table - Static MAC table data structure
960  * @mac_addr:	MAC address to filter.
961  * @vid:	VID value.
962  * @fid:	FID value.
963  * @ports:	Port membership.
964  * @override:	Override setting.
965  * @use_fid:	FID use setting.
966  * @valid:	Valid setting indicating the entry is being used.
967  */
968 struct ksz_mac_table {
969 	u8 mac_addr[ETH_ALEN];
970 	u16 vid;
971 	u8 fid;
972 	u8 ports;
973 	u8 override:1;
974 	u8 use_fid:1;
975 	u8 valid:1;
976 };
977 
978 #define VLAN_TABLE_ENTRIES		16
979 
980 /**
981  * struct ksz_vlan_table - VLAN table data structure
982  * @vid:	VID value.
983  * @fid:	FID value.
984  * @member:	Port membership.
985  */
986 struct ksz_vlan_table {
987 	u16 vid;
988 	u8 fid;
989 	u8 member;
990 };
991 
992 #define DIFFSERV_ENTRIES		64
993 #define PRIO_802_1P_ENTRIES		8
994 #define PRIO_QUEUES			4
995 
996 #define SWITCH_PORT_NUM			2
997 #define TOTAL_PORT_NUM			(SWITCH_PORT_NUM + 1)
998 #define HOST_MASK			(1 << SWITCH_PORT_NUM)
999 #define PORT_MASK			7
1000 
1001 #define MAIN_PORT			0
1002 #define OTHER_PORT			1
1003 #define HOST_PORT			SWITCH_PORT_NUM
1004 
1005 #define PORT_COUNTER_NUM		0x20
1006 #define TOTAL_PORT_COUNTER_NUM		(PORT_COUNTER_NUM + 2)
1007 
1008 #define MIB_COUNTER_RX_LO_PRIORITY	0x00
1009 #define MIB_COUNTER_RX_HI_PRIORITY	0x01
1010 #define MIB_COUNTER_RX_UNDERSIZE	0x02
1011 #define MIB_COUNTER_RX_FRAGMENT		0x03
1012 #define MIB_COUNTER_RX_OVERSIZE		0x04
1013 #define MIB_COUNTER_RX_JABBER		0x05
1014 #define MIB_COUNTER_RX_SYMBOL_ERR	0x06
1015 #define MIB_COUNTER_RX_CRC_ERR		0x07
1016 #define MIB_COUNTER_RX_ALIGNMENT_ERR	0x08
1017 #define MIB_COUNTER_RX_CTRL_8808	0x09
1018 #define MIB_COUNTER_RX_PAUSE		0x0A
1019 #define MIB_COUNTER_RX_BROADCAST	0x0B
1020 #define MIB_COUNTER_RX_MULTICAST	0x0C
1021 #define MIB_COUNTER_RX_UNICAST		0x0D
1022 #define MIB_COUNTER_RX_OCTET_64		0x0E
1023 #define MIB_COUNTER_RX_OCTET_65_127	0x0F
1024 #define MIB_COUNTER_RX_OCTET_128_255	0x10
1025 #define MIB_COUNTER_RX_OCTET_256_511	0x11
1026 #define MIB_COUNTER_RX_OCTET_512_1023	0x12
1027 #define MIB_COUNTER_RX_OCTET_1024_1522	0x13
1028 #define MIB_COUNTER_TX_LO_PRIORITY	0x14
1029 #define MIB_COUNTER_TX_HI_PRIORITY	0x15
1030 #define MIB_COUNTER_TX_LATE_COLLISION	0x16
1031 #define MIB_COUNTER_TX_PAUSE		0x17
1032 #define MIB_COUNTER_TX_BROADCAST	0x18
1033 #define MIB_COUNTER_TX_MULTICAST	0x19
1034 #define MIB_COUNTER_TX_UNICAST		0x1A
1035 #define MIB_COUNTER_TX_DEFERRED		0x1B
1036 #define MIB_COUNTER_TX_TOTAL_COLLISION	0x1C
1037 #define MIB_COUNTER_TX_EXCESS_COLLISION	0x1D
1038 #define MIB_COUNTER_TX_SINGLE_COLLISION	0x1E
1039 #define MIB_COUNTER_TX_MULTI_COLLISION	0x1F
1040 
1041 #define MIB_COUNTER_RX_DROPPED_PACKET	0x20
1042 #define MIB_COUNTER_TX_DROPPED_PACKET	0x21
1043 
1044 /**
1045  * struct ksz_port_mib - Port MIB data structure
1046  * @cnt_ptr:	Current pointer to MIB counter index.
1047  * @link_down:	Indication the link has just gone down.
1048  * @state:	Connection status of the port.
1049  * @mib_start:	The starting counter index.  Some ports do not start at 0.
1050  * @counter:	64-bit MIB counter value.
1051  * @dropped:	Temporary buffer to remember last read packet dropped values.
1052  *
1053  * MIB counters needs to be read periodically so that counters do not get
1054  * overflowed and give incorrect values.  A right balance is needed to
1055  * satisfy this condition and not waste too much CPU time.
1056  *
1057  * It is pointless to read MIB counters when the port is disconnected.  The
1058  * @state provides the connection status so that MIB counters are read only
1059  * when the port is connected.  The @link_down indicates the port is just
1060  * disconnected so that all MIB counters are read one last time to update the
1061  * information.
1062  */
1063 struct ksz_port_mib {
1064 	u8 cnt_ptr;
1065 	u8 link_down;
1066 	u8 state;
1067 	u8 mib_start;
1068 
1069 	u64 counter[TOTAL_PORT_COUNTER_NUM];
1070 	u32 dropped[2];
1071 };
1072 
1073 /**
1074  * struct ksz_port_cfg - Port configuration data structure
1075  * @vid:	VID value.
1076  * @member:	Port membership.
1077  * @port_prio:	Port priority.
1078  * @rx_rate:	Receive priority rate.
1079  * @tx_rate:	Transmit priority rate.
1080  * @stp_state:	Current Spanning Tree Protocol state.
1081  */
1082 struct ksz_port_cfg {
1083 	u16 vid;
1084 	u8 member;
1085 	u8 port_prio;
1086 	u32 rx_rate[PRIO_QUEUES];
1087 	u32 tx_rate[PRIO_QUEUES];
1088 	int stp_state;
1089 };
1090 
1091 /**
1092  * struct ksz_switch - KSZ8842 switch data structure
1093  * @mac_table:	MAC table entries information.
1094  * @vlan_table:	VLAN table entries information.
1095  * @port_cfg:	Port configuration information.
1096  * @diffserv:	DiffServ priority settings.  Possible values from 6-bit of ToS
1097  * 		(bit7 ~ bit2) field.
1098  * @p_802_1p:	802.1P priority settings.  Possible values from 3-bit of 802.1p
1099  * 		Tag priority field.
1100  * @br_addr:	Bridge address.  Used for STP.
1101  * @other_addr:	Other MAC address.  Used for multiple network device mode.
1102  * @broad_per:	Broadcast storm percentage.
1103  * @member:	Current port membership.  Used for STP.
1104  */
1105 struct ksz_switch {
1106 	struct ksz_mac_table mac_table[STATIC_MAC_TABLE_ENTRIES];
1107 	struct ksz_vlan_table vlan_table[VLAN_TABLE_ENTRIES];
1108 	struct ksz_port_cfg port_cfg[TOTAL_PORT_NUM];
1109 
1110 	u8 diffserv[DIFFSERV_ENTRIES];
1111 	u8 p_802_1p[PRIO_802_1P_ENTRIES];
1112 
1113 	u8 br_addr[ETH_ALEN];
1114 	u8 other_addr[ETH_ALEN];
1115 
1116 	u8 broad_per;
1117 	u8 member;
1118 };
1119 
1120 #define TX_RATE_UNIT			10000
1121 
1122 /**
1123  * struct ksz_port_info - Port information data structure
1124  * @state:	Connection status of the port.
1125  * @tx_rate:	Transmit rate divided by 10000 to get Mbit.
1126  * @duplex:	Duplex mode.
1127  * @advertised:	Advertised auto-negotiation setting.  Used to determine link.
1128  * @partner:	Auto-negotiation partner setting.  Used to determine link.
1129  * @port_id:	Port index to access actual hardware register.
1130  * @pdev:	Pointer to OS dependent network device.
1131  */
1132 struct ksz_port_info {
1133 	uint state;
1134 	uint tx_rate;
1135 	u8 duplex;
1136 	u8 advertised;
1137 	u8 partner;
1138 	u8 port_id;
1139 	void *pdev;
1140 };
1141 
1142 #define MAX_TX_HELD_SIZE		52000
1143 
1144 /* Hardware features and bug fixes. */
1145 #define LINK_INT_WORKING		(1 << 0)
1146 #define SMALL_PACKET_TX_BUG		(1 << 1)
1147 #define HALF_DUPLEX_SIGNAL_BUG		(1 << 2)
1148 #define RX_HUGE_FRAME			(1 << 4)
1149 #define STP_SUPPORT			(1 << 8)
1150 
1151 /* Software overrides. */
1152 #define PAUSE_FLOW_CTRL			(1 << 0)
1153 #define FAST_AGING			(1 << 1)
1154 
1155 /**
1156  * struct ksz_hw - KSZ884X hardware data structure
1157  * @io:			Virtual address assigned.
1158  * @ksz_switch:		Pointer to KSZ8842 switch.
1159  * @port_info:		Port information.
1160  * @port_mib:		Port MIB information.
1161  * @dev_count:		Number of network devices this hardware supports.
1162  * @dst_ports:		Destination ports in switch for transmission.
1163  * @id:			Hardware ID.  Used for display only.
1164  * @mib_cnt:		Number of MIB counters this hardware has.
1165  * @mib_port_cnt:	Number of ports with MIB counters.
1166  * @tx_cfg:		Cached transmit control settings.
1167  * @rx_cfg:		Cached receive control settings.
1168  * @intr_mask:		Current interrupt mask.
1169  * @intr_set:		Current interrup set.
1170  * @intr_blocked:	Interrupt blocked.
1171  * @rx_desc_info:	Receive descriptor information.
1172  * @tx_desc_info:	Transmit descriptor information.
1173  * @tx_int_cnt:		Transmit interrupt count.  Used for TX optimization.
1174  * @tx_int_mask:	Transmit interrupt mask.  Used for TX optimization.
1175  * @tx_size:		Transmit data size.  Used for TX optimization.
1176  * 			The maximum is defined by MAX_TX_HELD_SIZE.
1177  * @perm_addr:		Permanent MAC address.
1178  * @override_addr:	Overridden MAC address.
1179  * @address:		Additional MAC address entries.
1180  * @addr_list_size:	Additional MAC address list size.
1181  * @mac_override:	Indication of MAC address overridden.
1182  * @promiscuous:	Counter to keep track of promiscuous mode set.
1183  * @all_multi:		Counter to keep track of all multicast mode set.
1184  * @multi_list:		Multicast address entries.
1185  * @multi_bits:		Cached multicast hash table settings.
1186  * @multi_list_size:	Multicast address list size.
1187  * @enabled:		Indication of hardware enabled.
1188  * @rx_stop:		Indication of receive process stop.
1189  * @reserved2:		none
1190  * @features:		Hardware features to enable.
1191  * @overrides:		Hardware features to override.
1192  * @parent:		Pointer to parent, network device private structure.
1193  */
1194 struct ksz_hw {
1195 	void __iomem *io;
1196 
1197 	struct ksz_switch *ksz_switch;
1198 	struct ksz_port_info port_info[SWITCH_PORT_NUM];
1199 	struct ksz_port_mib port_mib[TOTAL_PORT_NUM];
1200 	int dev_count;
1201 	int dst_ports;
1202 	int id;
1203 	int mib_cnt;
1204 	int mib_port_cnt;
1205 
1206 	u32 tx_cfg;
1207 	u32 rx_cfg;
1208 	u32 intr_mask;
1209 	u32 intr_set;
1210 	uint intr_blocked;
1211 
1212 	struct ksz_desc_info rx_desc_info;
1213 	struct ksz_desc_info tx_desc_info;
1214 
1215 	int tx_int_cnt;
1216 	int tx_int_mask;
1217 	int tx_size;
1218 
1219 	u8 perm_addr[ETH_ALEN];
1220 	u8 override_addr[ETH_ALEN];
1221 	u8 address[ADDITIONAL_ENTRIES][ETH_ALEN];
1222 	u8 addr_list_size;
1223 	u8 mac_override;
1224 	u8 promiscuous;
1225 	u8 all_multi;
1226 	u8 multi_list[MAX_MULTICAST_LIST][ETH_ALEN];
1227 	u8 multi_bits[HW_MULTICAST_SIZE];
1228 	u8 multi_list_size;
1229 
1230 	u8 enabled;
1231 	u8 rx_stop;
1232 	u8 reserved2[1];
1233 
1234 	uint features;
1235 	uint overrides;
1236 
1237 	void *parent;
1238 };
1239 
1240 enum {
1241 	PHY_NO_FLOW_CTRL,
1242 	PHY_FLOW_CTRL,
1243 	PHY_TX_ONLY,
1244 	PHY_RX_ONLY
1245 };
1246 
1247 /**
1248  * struct ksz_port - Virtual port data structure
1249  * @duplex:		Duplex mode setting.  1 for half duplex, 2 for full
1250  * 			duplex, and 0 for auto, which normally results in full
1251  * 			duplex.
1252  * @speed:		Speed setting.  10 for 10 Mbit, 100 for 100 Mbit, and
1253  * 			0 for auto, which normally results in 100 Mbit.
1254  * @force_link:		Force link setting.  0 for auto-negotiation, and 1 for
1255  * 			force.
1256  * @flow_ctrl:		Flow control setting.  PHY_NO_FLOW_CTRL for no flow
1257  * 			control, and PHY_FLOW_CTRL for flow control.
1258  * 			PHY_TX_ONLY and PHY_RX_ONLY are not supported for 100
1259  * 			Mbit PHY.
1260  * @first_port:		Index of first port this port supports.
1261  * @mib_port_cnt:	Number of ports with MIB counters.
1262  * @port_cnt:		Number of ports this port supports.
1263  * @counter:		Port statistics counter.
1264  * @hw:			Pointer to hardware structure.
1265  * @linked:		Pointer to port information linked to this port.
1266  */
1267 struct ksz_port {
1268 	u8 duplex;
1269 	u8 speed;
1270 	u8 force_link;
1271 	u8 flow_ctrl;
1272 
1273 	int first_port;
1274 	int mib_port_cnt;
1275 	int port_cnt;
1276 	u64 counter[OID_COUNTER_LAST];
1277 
1278 	struct ksz_hw *hw;
1279 	struct ksz_port_info *linked;
1280 };
1281 
1282 /**
1283  * struct ksz_timer_info - Timer information data structure
1284  * @timer:	Kernel timer.
1285  * @cnt:	Running timer counter.
1286  * @max:	Number of times to run timer; -1 for infinity.
1287  * @period:	Timer period in jiffies.
1288  */
1289 struct ksz_timer_info {
1290 	struct timer_list timer;
1291 	int cnt;
1292 	int max;
1293 	int period;
1294 };
1295 
1296 /**
1297  * struct ksz_shared_mem - OS dependent shared memory data structure
1298  * @dma_addr:	Physical DMA address allocated.
1299  * @alloc_size:	Allocation size.
1300  * @phys:	Actual physical address used.
1301  * @alloc_virt:	Virtual address allocated.
1302  * @virt:	Actual virtual address used.
1303  */
1304 struct ksz_shared_mem {
1305 	dma_addr_t dma_addr;
1306 	uint alloc_size;
1307 	uint phys;
1308 	u8 *alloc_virt;
1309 	u8 *virt;
1310 };
1311 
1312 /**
1313  * struct ksz_counter_info - OS dependent counter information data structure
1314  * @counter:	Wait queue to wakeup after counters are read.
1315  * @time:	Next time in jiffies to read counter.
1316  * @read:	Indication of counters read in full or not.
1317  */
1318 struct ksz_counter_info {
1319 	wait_queue_head_t counter;
1320 	unsigned long time;
1321 	int read;
1322 };
1323 
1324 /**
1325  * struct dev_info - Network device information data structure
1326  * @dev:		Pointer to network device.
1327  * @pdev:		Pointer to PCI device.
1328  * @hw:			Hardware structure.
1329  * @desc_pool:		Physical memory used for descriptor pool.
1330  * @hwlock:		Spinlock to prevent hardware from accessing.
1331  * @lock:		Mutex lock to prevent device from accessing.
1332  * @dev_rcv:		Receive process function used.
1333  * @last_skb:		Socket buffer allocated for descriptor rx fragments.
1334  * @skb_index:		Buffer index for receiving fragments.
1335  * @skb_len:		Buffer length for receiving fragments.
1336  * @mib_read:		Workqueue to read MIB counters.
1337  * @mib_timer_info:	Timer to read MIB counters.
1338  * @counter:		Used for MIB reading.
1339  * @mtu:		Current MTU used.  The default is REGULAR_RX_BUF_SIZE;
1340  * 			the maximum is MAX_RX_BUF_SIZE.
1341  * @opened:		Counter to keep track of device open.
1342  * @rx_tasklet:		Receive processing tasklet.
1343  * @tx_tasklet:		Transmit processing tasklet.
1344  * @wol_enable:		Wake-on-LAN enable set by ethtool.
1345  * @wol_support:	Wake-on-LAN support used by ethtool.
1346  * @pme_wait:		Used for KSZ8841 power management.
1347  */
1348 struct dev_info {
1349 	struct net_device *dev;
1350 	struct pci_dev *pdev;
1351 
1352 	struct ksz_hw hw;
1353 	struct ksz_shared_mem desc_pool;
1354 
1355 	spinlock_t hwlock;
1356 	struct mutex lock;
1357 
1358 	int (*dev_rcv)(struct dev_info *);
1359 
1360 	struct sk_buff *last_skb;
1361 	int skb_index;
1362 	int skb_len;
1363 
1364 	struct work_struct mib_read;
1365 	struct ksz_timer_info mib_timer_info;
1366 	struct ksz_counter_info counter[TOTAL_PORT_NUM];
1367 
1368 	int mtu;
1369 	int opened;
1370 
1371 	struct tasklet_struct rx_tasklet;
1372 	struct tasklet_struct tx_tasklet;
1373 
1374 	int wol_enable;
1375 	int wol_support;
1376 	unsigned long pme_wait;
1377 };
1378 
1379 /**
1380  * struct dev_priv - Network device private data structure
1381  * @adapter:		Adapter device information.
1382  * @port:		Port information.
1383  * @monitor_timer_info:	Timer to monitor ports.
1384  * @proc_sem:		Semaphore for proc accessing.
1385  * @id:			Device ID.
1386  * @mii_if:		MII interface information.
1387  * @advertising:	Temporary variable to store advertised settings.
1388  * @msg_enable:		The message flags controlling driver output.
1389  * @media_state:	The connection status of the device.
1390  * @multicast:		The all multicast state of the device.
1391  * @promiscuous:	The promiscuous state of the device.
1392  */
1393 struct dev_priv {
1394 	struct dev_info *adapter;
1395 	struct ksz_port port;
1396 	struct ksz_timer_info monitor_timer_info;
1397 
1398 	struct semaphore proc_sem;
1399 	int id;
1400 
1401 	struct mii_if_info mii_if;
1402 	u32 advertising;
1403 
1404 	u32 msg_enable;
1405 	int media_state;
1406 	int multicast;
1407 	int promiscuous;
1408 };
1409 
1410 #define DRV_NAME		"KSZ884X PCI"
1411 #define DEVICE_NAME		"KSZ884x PCI"
1412 #define DRV_VERSION		"1.0.0"
1413 #define DRV_RELDATE		"Feb 8, 2010"
1414 
1415 static char version[] =
1416 	"Micrel " DEVICE_NAME " " DRV_VERSION " (" DRV_RELDATE ")";
1417 
1418 static u8 DEFAULT_MAC_ADDRESS[] = { 0x00, 0x10, 0xA1, 0x88, 0x42, 0x01 };
1419 
1420 /*
1421  * Interrupt processing primary routines
1422  */
1423 
1424 static inline void hw_ack_intr(struct ksz_hw *hw, uint interrupt)
1425 {
1426 	writel(interrupt, hw->io + KS884X_INTERRUPTS_STATUS);
1427 }
1428 
1429 static inline void hw_dis_intr(struct ksz_hw *hw)
1430 {
1431 	hw->intr_blocked = hw->intr_mask;
1432 	writel(0, hw->io + KS884X_INTERRUPTS_ENABLE);
1433 	hw->intr_set = readl(hw->io + KS884X_INTERRUPTS_ENABLE);
1434 }
1435 
1436 static inline void hw_set_intr(struct ksz_hw *hw, uint interrupt)
1437 {
1438 	hw->intr_set = interrupt;
1439 	writel(interrupt, hw->io + KS884X_INTERRUPTS_ENABLE);
1440 }
1441 
1442 static inline void hw_ena_intr(struct ksz_hw *hw)
1443 {
1444 	hw->intr_blocked = 0;
1445 	hw_set_intr(hw, hw->intr_mask);
1446 }
1447 
1448 static inline void hw_dis_intr_bit(struct ksz_hw *hw, uint bit)
1449 {
1450 	hw->intr_mask &= ~(bit);
1451 }
1452 
1453 static inline void hw_turn_off_intr(struct ksz_hw *hw, uint interrupt)
1454 {
1455 	u32 read_intr;
1456 
1457 	read_intr = readl(hw->io + KS884X_INTERRUPTS_ENABLE);
1458 	hw->intr_set = read_intr & ~interrupt;
1459 	writel(hw->intr_set, hw->io + KS884X_INTERRUPTS_ENABLE);
1460 	hw_dis_intr_bit(hw, interrupt);
1461 }
1462 
1463 /**
1464  * hw_turn_on_intr - turn on specified interrupts
1465  * @hw: 	The hardware instance.
1466  * @bit:	The interrupt bits to be on.
1467  *
1468  * This routine turns on the specified interrupts in the interrupt mask so that
1469  * those interrupts will be enabled.
1470  */
1471 static void hw_turn_on_intr(struct ksz_hw *hw, u32 bit)
1472 {
1473 	hw->intr_mask |= bit;
1474 
1475 	if (!hw->intr_blocked)
1476 		hw_set_intr(hw, hw->intr_mask);
1477 }
1478 
1479 static inline void hw_ena_intr_bit(struct ksz_hw *hw, uint interrupt)
1480 {
1481 	u32 read_intr;
1482 
1483 	read_intr = readl(hw->io + KS884X_INTERRUPTS_ENABLE);
1484 	hw->intr_set = read_intr | interrupt;
1485 	writel(hw->intr_set, hw->io + KS884X_INTERRUPTS_ENABLE);
1486 }
1487 
1488 static inline void hw_read_intr(struct ksz_hw *hw, uint *status)
1489 {
1490 	*status = readl(hw->io + KS884X_INTERRUPTS_STATUS);
1491 	*status = *status & hw->intr_set;
1492 }
1493 
1494 static inline void hw_restore_intr(struct ksz_hw *hw, uint interrupt)
1495 {
1496 	if (interrupt)
1497 		hw_ena_intr(hw);
1498 }
1499 
1500 /**
1501  * hw_block_intr - block hardware interrupts
1502  * @hw: The hardware instance.
1503  *
1504  * This function blocks all interrupts of the hardware and returns the current
1505  * interrupt enable mask so that interrupts can be restored later.
1506  *
1507  * Return the current interrupt enable mask.
1508  */
1509 static uint hw_block_intr(struct ksz_hw *hw)
1510 {
1511 	uint interrupt = 0;
1512 
1513 	if (!hw->intr_blocked) {
1514 		hw_dis_intr(hw);
1515 		interrupt = hw->intr_blocked;
1516 	}
1517 	return interrupt;
1518 }
1519 
1520 /*
1521  * Hardware descriptor routines
1522  */
1523 
1524 static inline void reset_desc(struct ksz_desc *desc, union desc_stat status)
1525 {
1526 	status.rx.hw_owned = 0;
1527 	desc->phw->ctrl.data = cpu_to_le32(status.data);
1528 }
1529 
1530 static inline void release_desc(struct ksz_desc *desc)
1531 {
1532 	desc->sw.ctrl.tx.hw_owned = 1;
1533 	if (desc->sw.buf_size != desc->sw.buf.data) {
1534 		desc->sw.buf_size = desc->sw.buf.data;
1535 		desc->phw->buf.data = cpu_to_le32(desc->sw.buf.data);
1536 	}
1537 	desc->phw->ctrl.data = cpu_to_le32(desc->sw.ctrl.data);
1538 }
1539 
1540 static void get_rx_pkt(struct ksz_desc_info *info, struct ksz_desc **desc)
1541 {
1542 	*desc = &info->ring[info->last];
1543 	info->last++;
1544 	info->last &= info->mask;
1545 	info->avail--;
1546 	(*desc)->sw.buf.data &= ~KS_DESC_RX_MASK;
1547 }
1548 
1549 static inline void set_rx_buf(struct ksz_desc *desc, u32 addr)
1550 {
1551 	desc->phw->addr = cpu_to_le32(addr);
1552 }
1553 
1554 static inline void set_rx_len(struct ksz_desc *desc, u32 len)
1555 {
1556 	desc->sw.buf.rx.buf_size = len;
1557 }
1558 
1559 static inline void get_tx_pkt(struct ksz_desc_info *info,
1560 	struct ksz_desc **desc)
1561 {
1562 	*desc = &info->ring[info->next];
1563 	info->next++;
1564 	info->next &= info->mask;
1565 	info->avail--;
1566 	(*desc)->sw.buf.data &= ~KS_DESC_TX_MASK;
1567 }
1568 
1569 static inline void set_tx_buf(struct ksz_desc *desc, u32 addr)
1570 {
1571 	desc->phw->addr = cpu_to_le32(addr);
1572 }
1573 
1574 static inline void set_tx_len(struct ksz_desc *desc, u32 len)
1575 {
1576 	desc->sw.buf.tx.buf_size = len;
1577 }
1578 
1579 /* Switch functions */
1580 
1581 #define TABLE_READ			0x10
1582 #define TABLE_SEL_SHIFT			2
1583 
1584 #define HW_DELAY(hw, reg)			\
1585 	do {					\
1586 		readw(hw->io + reg);		\
1587 	} while (0)
1588 
1589 /**
1590  * sw_r_table - read 4 bytes of data from switch table
1591  * @hw:		The hardware instance.
1592  * @table:	The table selector.
1593  * @addr:	The address of the table entry.
1594  * @data:	Buffer to store the read data.
1595  *
1596  * This routine reads 4 bytes of data from the table of the switch.
1597  * Hardware interrupts are disabled to minimize corruption of read data.
1598  */
1599 static void sw_r_table(struct ksz_hw *hw, int table, u16 addr, u32 *data)
1600 {
1601 	u16 ctrl_addr;
1602 	uint interrupt;
1603 
1604 	ctrl_addr = (((table << TABLE_SEL_SHIFT) | TABLE_READ) << 8) | addr;
1605 
1606 	interrupt = hw_block_intr(hw);
1607 
1608 	writew(ctrl_addr, hw->io + KS884X_IACR_OFFSET);
1609 	HW_DELAY(hw, KS884X_IACR_OFFSET);
1610 	*data = readl(hw->io + KS884X_ACC_DATA_0_OFFSET);
1611 
1612 	hw_restore_intr(hw, interrupt);
1613 }
1614 
1615 /**
1616  * sw_w_table_64 - write 8 bytes of data to the switch table
1617  * @hw:		The hardware instance.
1618  * @table:	The table selector.
1619  * @addr:	The address of the table entry.
1620  * @data_hi:	The high part of data to be written (bit63 ~ bit32).
1621  * @data_lo:	The low part of data to be written (bit31 ~ bit0).
1622  *
1623  * This routine writes 8 bytes of data to the table of the switch.
1624  * Hardware interrupts are disabled to minimize corruption of written data.
1625  */
1626 static void sw_w_table_64(struct ksz_hw *hw, int table, u16 addr, u32 data_hi,
1627 	u32 data_lo)
1628 {
1629 	u16 ctrl_addr;
1630 	uint interrupt;
1631 
1632 	ctrl_addr = ((table << TABLE_SEL_SHIFT) << 8) | addr;
1633 
1634 	interrupt = hw_block_intr(hw);
1635 
1636 	writel(data_hi, hw->io + KS884X_ACC_DATA_4_OFFSET);
1637 	writel(data_lo, hw->io + KS884X_ACC_DATA_0_OFFSET);
1638 
1639 	writew(ctrl_addr, hw->io + KS884X_IACR_OFFSET);
1640 	HW_DELAY(hw, KS884X_IACR_OFFSET);
1641 
1642 	hw_restore_intr(hw, interrupt);
1643 }
1644 
1645 /**
1646  * sw_w_sta_mac_table - write to the static MAC table
1647  * @hw: 	The hardware instance.
1648  * @addr:	The address of the table entry.
1649  * @mac_addr:	The MAC address.
1650  * @ports:	The port members.
1651  * @override:	The flag to override the port receive/transmit settings.
1652  * @valid:	The flag to indicate entry is valid.
1653  * @use_fid:	The flag to indicate the FID is valid.
1654  * @fid:	The FID value.
1655  *
1656  * This routine writes an entry of the static MAC table of the switch.  It
1657  * calls sw_w_table_64() to write the data.
1658  */
1659 static void sw_w_sta_mac_table(struct ksz_hw *hw, u16 addr, u8 *mac_addr,
1660 	u8 ports, int override, int valid, int use_fid, u8 fid)
1661 {
1662 	u32 data_hi;
1663 	u32 data_lo;
1664 
1665 	data_lo = ((u32) mac_addr[2] << 24) |
1666 		((u32) mac_addr[3] << 16) |
1667 		((u32) mac_addr[4] << 8) | mac_addr[5];
1668 	data_hi = ((u32) mac_addr[0] << 8) | mac_addr[1];
1669 	data_hi |= (u32) ports << STATIC_MAC_FWD_PORTS_SHIFT;
1670 
1671 	if (override)
1672 		data_hi |= STATIC_MAC_TABLE_OVERRIDE;
1673 	if (use_fid) {
1674 		data_hi |= STATIC_MAC_TABLE_USE_FID;
1675 		data_hi |= (u32) fid << STATIC_MAC_FID_SHIFT;
1676 	}
1677 	if (valid)
1678 		data_hi |= STATIC_MAC_TABLE_VALID;
1679 
1680 	sw_w_table_64(hw, TABLE_STATIC_MAC, addr, data_hi, data_lo);
1681 }
1682 
1683 /**
1684  * sw_r_vlan_table - read from the VLAN table
1685  * @hw: 	The hardware instance.
1686  * @addr:	The address of the table entry.
1687  * @vid:	Buffer to store the VID.
1688  * @fid:	Buffer to store the VID.
1689  * @member:	Buffer to store the port membership.
1690  *
1691  * This function reads an entry of the VLAN table of the switch.  It calls
1692  * sw_r_table() to get the data.
1693  *
1694  * Return 0 if the entry is valid; otherwise -1.
1695  */
1696 static int sw_r_vlan_table(struct ksz_hw *hw, u16 addr, u16 *vid, u8 *fid,
1697 	u8 *member)
1698 {
1699 	u32 data;
1700 
1701 	sw_r_table(hw, TABLE_VLAN, addr, &data);
1702 	if (data & VLAN_TABLE_VALID) {
1703 		*vid = (u16)(data & VLAN_TABLE_VID);
1704 		*fid = (u8)((data & VLAN_TABLE_FID) >> VLAN_TABLE_FID_SHIFT);
1705 		*member = (u8)((data & VLAN_TABLE_MEMBERSHIP) >>
1706 			VLAN_TABLE_MEMBERSHIP_SHIFT);
1707 		return 0;
1708 	}
1709 	return -1;
1710 }
1711 
1712 /**
1713  * port_r_mib_cnt - read MIB counter
1714  * @hw: 	The hardware instance.
1715  * @port:	The port index.
1716  * @addr:	The address of the counter.
1717  * @cnt:	Buffer to store the counter.
1718  *
1719  * This routine reads a MIB counter of the port.
1720  * Hardware interrupts are disabled to minimize corruption of read data.
1721  */
1722 static void port_r_mib_cnt(struct ksz_hw *hw, int port, u16 addr, u64 *cnt)
1723 {
1724 	u32 data;
1725 	u16 ctrl_addr;
1726 	uint interrupt;
1727 	int timeout;
1728 
1729 	ctrl_addr = addr + PORT_COUNTER_NUM * port;
1730 
1731 	interrupt = hw_block_intr(hw);
1732 
1733 	ctrl_addr |= (((TABLE_MIB << TABLE_SEL_SHIFT) | TABLE_READ) << 8);
1734 	writew(ctrl_addr, hw->io + KS884X_IACR_OFFSET);
1735 	HW_DELAY(hw, KS884X_IACR_OFFSET);
1736 
1737 	for (timeout = 100; timeout > 0; timeout--) {
1738 		data = readl(hw->io + KS884X_ACC_DATA_0_OFFSET);
1739 
1740 		if (data & MIB_COUNTER_VALID) {
1741 			if (data & MIB_COUNTER_OVERFLOW)
1742 				*cnt += MIB_COUNTER_VALUE + 1;
1743 			*cnt += data & MIB_COUNTER_VALUE;
1744 			break;
1745 		}
1746 	}
1747 
1748 	hw_restore_intr(hw, interrupt);
1749 }
1750 
1751 /**
1752  * port_r_mib_pkt - read dropped packet counts
1753  * @hw: 	The hardware instance.
1754  * @port:	The port index.
1755  * @last:	last one
1756  * @cnt:	Buffer to store the receive and transmit dropped packet counts.
1757  *
1758  * This routine reads the dropped packet counts of the port.
1759  * Hardware interrupts are disabled to minimize corruption of read data.
1760  */
1761 static void port_r_mib_pkt(struct ksz_hw *hw, int port, u32 *last, u64 *cnt)
1762 {
1763 	u32 cur;
1764 	u32 data;
1765 	u16 ctrl_addr;
1766 	uint interrupt;
1767 	int index;
1768 
1769 	index = KS_MIB_PACKET_DROPPED_RX_0 + port;
1770 	do {
1771 		interrupt = hw_block_intr(hw);
1772 
1773 		ctrl_addr = (u16) index;
1774 		ctrl_addr |= (((TABLE_MIB << TABLE_SEL_SHIFT) | TABLE_READ)
1775 			<< 8);
1776 		writew(ctrl_addr, hw->io + KS884X_IACR_OFFSET);
1777 		HW_DELAY(hw, KS884X_IACR_OFFSET);
1778 		data = readl(hw->io + KS884X_ACC_DATA_0_OFFSET);
1779 
1780 		hw_restore_intr(hw, interrupt);
1781 
1782 		data &= MIB_PACKET_DROPPED;
1783 		cur = *last;
1784 		if (data != cur) {
1785 			*last = data;
1786 			if (data < cur)
1787 				data += MIB_PACKET_DROPPED + 1;
1788 			data -= cur;
1789 			*cnt += data;
1790 		}
1791 		++last;
1792 		++cnt;
1793 		index -= KS_MIB_PACKET_DROPPED_TX -
1794 			KS_MIB_PACKET_DROPPED_TX_0 + 1;
1795 	} while (index >= KS_MIB_PACKET_DROPPED_TX_0 + port);
1796 }
1797 
1798 /**
1799  * port_r_cnt - read MIB counters periodically
1800  * @hw: 	The hardware instance.
1801  * @port:	The port index.
1802  *
1803  * This routine is used to read the counters of the port periodically to avoid
1804  * counter overflow.  The hardware should be acquired first before calling this
1805  * routine.
1806  *
1807  * Return non-zero when not all counters not read.
1808  */
1809 static int port_r_cnt(struct ksz_hw *hw, int port)
1810 {
1811 	struct ksz_port_mib *mib = &hw->port_mib[port];
1812 
1813 	if (mib->mib_start < PORT_COUNTER_NUM)
1814 		while (mib->cnt_ptr < PORT_COUNTER_NUM) {
1815 			port_r_mib_cnt(hw, port, mib->cnt_ptr,
1816 				&mib->counter[mib->cnt_ptr]);
1817 			++mib->cnt_ptr;
1818 		}
1819 	if (hw->mib_cnt > PORT_COUNTER_NUM)
1820 		port_r_mib_pkt(hw, port, mib->dropped,
1821 			&mib->counter[PORT_COUNTER_NUM]);
1822 	mib->cnt_ptr = 0;
1823 	return 0;
1824 }
1825 
1826 /**
1827  * port_init_cnt - initialize MIB counter values
1828  * @hw: 	The hardware instance.
1829  * @port:	The port index.
1830  *
1831  * This routine is used to initialize all counters to zero if the hardware
1832  * cannot do it after reset.
1833  */
1834 static void port_init_cnt(struct ksz_hw *hw, int port)
1835 {
1836 	struct ksz_port_mib *mib = &hw->port_mib[port];
1837 
1838 	mib->cnt_ptr = 0;
1839 	if (mib->mib_start < PORT_COUNTER_NUM)
1840 		do {
1841 			port_r_mib_cnt(hw, port, mib->cnt_ptr,
1842 				&mib->counter[mib->cnt_ptr]);
1843 			++mib->cnt_ptr;
1844 		} while (mib->cnt_ptr < PORT_COUNTER_NUM);
1845 	if (hw->mib_cnt > PORT_COUNTER_NUM)
1846 		port_r_mib_pkt(hw, port, mib->dropped,
1847 			&mib->counter[PORT_COUNTER_NUM]);
1848 	memset((void *) mib->counter, 0, sizeof(u64) * TOTAL_PORT_COUNTER_NUM);
1849 	mib->cnt_ptr = 0;
1850 }
1851 
1852 /*
1853  * Port functions
1854  */
1855 
1856 /**
1857  * port_chk - check port register bits
1858  * @hw: 	The hardware instance.
1859  * @port:	The port index.
1860  * @offset:	The offset of the port register.
1861  * @bits:	The data bits to check.
1862  *
1863  * This function checks whether the specified bits of the port register are set
1864  * or not.
1865  *
1866  * Return 0 if the bits are not set.
1867  */
1868 static int port_chk(struct ksz_hw *hw, int port, int offset, u16 bits)
1869 {
1870 	u32 addr;
1871 	u16 data;
1872 
1873 	PORT_CTRL_ADDR(port, addr);
1874 	addr += offset;
1875 	data = readw(hw->io + addr);
1876 	return (data & bits) == bits;
1877 }
1878 
1879 /**
1880  * port_cfg - set port register bits
1881  * @hw: 	The hardware instance.
1882  * @port:	The port index.
1883  * @offset:	The offset of the port register.
1884  * @bits:	The data bits to set.
1885  * @set:	The flag indicating whether the bits are to be set or not.
1886  *
1887  * This routine sets or resets the specified bits of the port register.
1888  */
1889 static void port_cfg(struct ksz_hw *hw, int port, int offset, u16 bits,
1890 	int set)
1891 {
1892 	u32 addr;
1893 	u16 data;
1894 
1895 	PORT_CTRL_ADDR(port, addr);
1896 	addr += offset;
1897 	data = readw(hw->io + addr);
1898 	if (set)
1899 		data |= bits;
1900 	else
1901 		data &= ~bits;
1902 	writew(data, hw->io + addr);
1903 }
1904 
1905 /**
1906  * port_chk_shift - check port bit
1907  * @hw: 	The hardware instance.
1908  * @port:	The port index.
1909  * @addr:	The offset of the register.
1910  * @shift:	Number of bits to shift.
1911  *
1912  * This function checks whether the specified port is set in the register or
1913  * not.
1914  *
1915  * Return 0 if the port is not set.
1916  */
1917 static int port_chk_shift(struct ksz_hw *hw, int port, u32 addr, int shift)
1918 {
1919 	u16 data;
1920 	u16 bit = 1 << port;
1921 
1922 	data = readw(hw->io + addr);
1923 	data >>= shift;
1924 	return (data & bit) == bit;
1925 }
1926 
1927 /**
1928  * port_cfg_shift - set port bit
1929  * @hw: 	The hardware instance.
1930  * @port:	The port index.
1931  * @addr:	The offset of the register.
1932  * @shift:	Number of bits to shift.
1933  * @set:	The flag indicating whether the port is to be set or not.
1934  *
1935  * This routine sets or resets the specified port in the register.
1936  */
1937 static void port_cfg_shift(struct ksz_hw *hw, int port, u32 addr, int shift,
1938 	int set)
1939 {
1940 	u16 data;
1941 	u16 bits = 1 << port;
1942 
1943 	data = readw(hw->io + addr);
1944 	bits <<= shift;
1945 	if (set)
1946 		data |= bits;
1947 	else
1948 		data &= ~bits;
1949 	writew(data, hw->io + addr);
1950 }
1951 
1952 /**
1953  * port_r8 - read byte from port register
1954  * @hw: 	The hardware instance.
1955  * @port:	The port index.
1956  * @offset:	The offset of the port register.
1957  * @data:	Buffer to store the data.
1958  *
1959  * This routine reads a byte from the port register.
1960  */
1961 static void port_r8(struct ksz_hw *hw, int port, int offset, u8 *data)
1962 {
1963 	u32 addr;
1964 
1965 	PORT_CTRL_ADDR(port, addr);
1966 	addr += offset;
1967 	*data = readb(hw->io + addr);
1968 }
1969 
1970 /**
1971  * port_r16 - read word from port register.
1972  * @hw: 	The hardware instance.
1973  * @port:	The port index.
1974  * @offset:	The offset of the port register.
1975  * @data:	Buffer to store the data.
1976  *
1977  * This routine reads a word from the port register.
1978  */
1979 static void port_r16(struct ksz_hw *hw, int port, int offset, u16 *data)
1980 {
1981 	u32 addr;
1982 
1983 	PORT_CTRL_ADDR(port, addr);
1984 	addr += offset;
1985 	*data = readw(hw->io + addr);
1986 }
1987 
1988 /**
1989  * port_w16 - write word to port register.
1990  * @hw: 	The hardware instance.
1991  * @port:	The port index.
1992  * @offset:	The offset of the port register.
1993  * @data:	Data to write.
1994  *
1995  * This routine writes a word to the port register.
1996  */
1997 static void port_w16(struct ksz_hw *hw, int port, int offset, u16 data)
1998 {
1999 	u32 addr;
2000 
2001 	PORT_CTRL_ADDR(port, addr);
2002 	addr += offset;
2003 	writew(data, hw->io + addr);
2004 }
2005 
2006 /**
2007  * sw_chk - check switch register bits
2008  * @hw: 	The hardware instance.
2009  * @addr:	The address of the switch register.
2010  * @bits:	The data bits to check.
2011  *
2012  * This function checks whether the specified bits of the switch register are
2013  * set or not.
2014  *
2015  * Return 0 if the bits are not set.
2016  */
2017 static int sw_chk(struct ksz_hw *hw, u32 addr, u16 bits)
2018 {
2019 	u16 data;
2020 
2021 	data = readw(hw->io + addr);
2022 	return (data & bits) == bits;
2023 }
2024 
2025 /**
2026  * sw_cfg - set switch register bits
2027  * @hw: 	The hardware instance.
2028  * @addr:	The address of the switch register.
2029  * @bits:	The data bits to set.
2030  * @set:	The flag indicating whether the bits are to be set or not.
2031  *
2032  * This function sets or resets the specified bits of the switch register.
2033  */
2034 static void sw_cfg(struct ksz_hw *hw, u32 addr, u16 bits, int set)
2035 {
2036 	u16 data;
2037 
2038 	data = readw(hw->io + addr);
2039 	if (set)
2040 		data |= bits;
2041 	else
2042 		data &= ~bits;
2043 	writew(data, hw->io + addr);
2044 }
2045 
2046 /* Bandwidth */
2047 
2048 static inline void port_cfg_broad_storm(struct ksz_hw *hw, int p, int set)
2049 {
2050 	port_cfg(hw, p,
2051 		KS8842_PORT_CTRL_1_OFFSET, PORT_BROADCAST_STORM, set);
2052 }
2053 
2054 static inline int port_chk_broad_storm(struct ksz_hw *hw, int p)
2055 {
2056 	return port_chk(hw, p,
2057 		KS8842_PORT_CTRL_1_OFFSET, PORT_BROADCAST_STORM);
2058 }
2059 
2060 /* Driver set switch broadcast storm protection at 10% rate. */
2061 #define BROADCAST_STORM_PROTECTION_RATE	10
2062 
2063 /* 148,800 frames * 67 ms / 100 */
2064 #define BROADCAST_STORM_VALUE		9969
2065 
2066 /**
2067  * sw_cfg_broad_storm - configure broadcast storm threshold
2068  * @hw: 	The hardware instance.
2069  * @percent:	Broadcast storm threshold in percent of transmit rate.
2070  *
2071  * This routine configures the broadcast storm threshold of the switch.
2072  */
2073 static void sw_cfg_broad_storm(struct ksz_hw *hw, u8 percent)
2074 {
2075 	u16 data;
2076 	u32 value = ((u32) BROADCAST_STORM_VALUE * (u32) percent / 100);
2077 
2078 	if (value > BROADCAST_STORM_RATE)
2079 		value = BROADCAST_STORM_RATE;
2080 
2081 	data = readw(hw->io + KS8842_SWITCH_CTRL_3_OFFSET);
2082 	data &= ~(BROADCAST_STORM_RATE_LO | BROADCAST_STORM_RATE_HI);
2083 	data |= ((value & 0x00FF) << 8) | ((value & 0xFF00) >> 8);
2084 	writew(data, hw->io + KS8842_SWITCH_CTRL_3_OFFSET);
2085 }
2086 
2087 /**
2088  * sw_get_broad_storm - get broadcast storm threshold
2089  * @hw: 	The hardware instance.
2090  * @percent:	Buffer to store the broadcast storm threshold percentage.
2091  *
2092  * This routine retrieves the broadcast storm threshold of the switch.
2093  */
2094 static void sw_get_broad_storm(struct ksz_hw *hw, u8 *percent)
2095 {
2096 	int num;
2097 	u16 data;
2098 
2099 	data = readw(hw->io + KS8842_SWITCH_CTRL_3_OFFSET);
2100 	num = (data & BROADCAST_STORM_RATE_HI);
2101 	num <<= 8;
2102 	num |= (data & BROADCAST_STORM_RATE_LO) >> 8;
2103 	num = DIV_ROUND_CLOSEST(num * 100, BROADCAST_STORM_VALUE);
2104 	*percent = (u8) num;
2105 }
2106 
2107 /**
2108  * sw_dis_broad_storm - disable broadstorm
2109  * @hw: 	The hardware instance.
2110  * @port:	The port index.
2111  *
2112  * This routine disables the broadcast storm limit function of the switch.
2113  */
2114 static void sw_dis_broad_storm(struct ksz_hw *hw, int port)
2115 {
2116 	port_cfg_broad_storm(hw, port, 0);
2117 }
2118 
2119 /**
2120  * sw_ena_broad_storm - enable broadcast storm
2121  * @hw: 	The hardware instance.
2122  * @port:	The port index.
2123  *
2124  * This routine enables the broadcast storm limit function of the switch.
2125  */
2126 static void sw_ena_broad_storm(struct ksz_hw *hw, int port)
2127 {
2128 	sw_cfg_broad_storm(hw, hw->ksz_switch->broad_per);
2129 	port_cfg_broad_storm(hw, port, 1);
2130 }
2131 
2132 /**
2133  * sw_init_broad_storm - initialize broadcast storm
2134  * @hw: 	The hardware instance.
2135  *
2136  * This routine initializes the broadcast storm limit function of the switch.
2137  */
2138 static void sw_init_broad_storm(struct ksz_hw *hw)
2139 {
2140 	int port;
2141 
2142 	hw->ksz_switch->broad_per = 1;
2143 	sw_cfg_broad_storm(hw, hw->ksz_switch->broad_per);
2144 	for (port = 0; port < TOTAL_PORT_NUM; port++)
2145 		sw_dis_broad_storm(hw, port);
2146 	sw_cfg(hw, KS8842_SWITCH_CTRL_2_OFFSET, MULTICAST_STORM_DISABLE, 1);
2147 }
2148 
2149 /**
2150  * hw_cfg_broad_storm - configure broadcast storm
2151  * @hw: 	The hardware instance.
2152  * @percent:	Broadcast storm threshold in percent of transmit rate.
2153  *
2154  * This routine configures the broadcast storm threshold of the switch.
2155  * It is called by user functions.  The hardware should be acquired first.
2156  */
2157 static void hw_cfg_broad_storm(struct ksz_hw *hw, u8 percent)
2158 {
2159 	if (percent > 100)
2160 		percent = 100;
2161 
2162 	sw_cfg_broad_storm(hw, percent);
2163 	sw_get_broad_storm(hw, &percent);
2164 	hw->ksz_switch->broad_per = percent;
2165 }
2166 
2167 /**
2168  * sw_dis_prio_rate - disable switch priority rate
2169  * @hw: 	The hardware instance.
2170  * @port:	The port index.
2171  *
2172  * This routine disables the priority rate function of the switch.
2173  */
2174 static void sw_dis_prio_rate(struct ksz_hw *hw, int port)
2175 {
2176 	u32 addr;
2177 
2178 	PORT_CTRL_ADDR(port, addr);
2179 	addr += KS8842_PORT_IN_RATE_OFFSET;
2180 	writel(0, hw->io + addr);
2181 }
2182 
2183 /**
2184  * sw_init_prio_rate - initialize switch prioirty rate
2185  * @hw: 	The hardware instance.
2186  *
2187  * This routine initializes the priority rate function of the switch.
2188  */
2189 static void sw_init_prio_rate(struct ksz_hw *hw)
2190 {
2191 	int port;
2192 	int prio;
2193 	struct ksz_switch *sw = hw->ksz_switch;
2194 
2195 	for (port = 0; port < TOTAL_PORT_NUM; port++) {
2196 		for (prio = 0; prio < PRIO_QUEUES; prio++) {
2197 			sw->port_cfg[port].rx_rate[prio] =
2198 			sw->port_cfg[port].tx_rate[prio] = 0;
2199 		}
2200 		sw_dis_prio_rate(hw, port);
2201 	}
2202 }
2203 
2204 /* Communication */
2205 
2206 static inline void port_cfg_back_pressure(struct ksz_hw *hw, int p, int set)
2207 {
2208 	port_cfg(hw, p,
2209 		KS8842_PORT_CTRL_2_OFFSET, PORT_BACK_PRESSURE, set);
2210 }
2211 
2212 static inline void port_cfg_force_flow_ctrl(struct ksz_hw *hw, int p, int set)
2213 {
2214 	port_cfg(hw, p,
2215 		KS8842_PORT_CTRL_2_OFFSET, PORT_FORCE_FLOW_CTRL, set);
2216 }
2217 
2218 static inline int port_chk_back_pressure(struct ksz_hw *hw, int p)
2219 {
2220 	return port_chk(hw, p,
2221 		KS8842_PORT_CTRL_2_OFFSET, PORT_BACK_PRESSURE);
2222 }
2223 
2224 static inline int port_chk_force_flow_ctrl(struct ksz_hw *hw, int p)
2225 {
2226 	return port_chk(hw, p,
2227 		KS8842_PORT_CTRL_2_OFFSET, PORT_FORCE_FLOW_CTRL);
2228 }
2229 
2230 /* Spanning Tree */
2231 
2232 static inline void port_cfg_rx(struct ksz_hw *hw, int p, int set)
2233 {
2234 	port_cfg(hw, p,
2235 		KS8842_PORT_CTRL_2_OFFSET, PORT_RX_ENABLE, set);
2236 }
2237 
2238 static inline void port_cfg_tx(struct ksz_hw *hw, int p, int set)
2239 {
2240 	port_cfg(hw, p,
2241 		KS8842_PORT_CTRL_2_OFFSET, PORT_TX_ENABLE, set);
2242 }
2243 
2244 static inline void sw_cfg_fast_aging(struct ksz_hw *hw, int set)
2245 {
2246 	sw_cfg(hw, KS8842_SWITCH_CTRL_1_OFFSET, SWITCH_FAST_AGING, set);
2247 }
2248 
2249 static inline void sw_flush_dyn_mac_table(struct ksz_hw *hw)
2250 {
2251 	if (!(hw->overrides & FAST_AGING)) {
2252 		sw_cfg_fast_aging(hw, 1);
2253 		mdelay(1);
2254 		sw_cfg_fast_aging(hw, 0);
2255 	}
2256 }
2257 
2258 /* VLAN */
2259 
2260 static inline void port_cfg_ins_tag(struct ksz_hw *hw, int p, int insert)
2261 {
2262 	port_cfg(hw, p,
2263 		KS8842_PORT_CTRL_1_OFFSET, PORT_INSERT_TAG, insert);
2264 }
2265 
2266 static inline void port_cfg_rmv_tag(struct ksz_hw *hw, int p, int remove)
2267 {
2268 	port_cfg(hw, p,
2269 		KS8842_PORT_CTRL_1_OFFSET, PORT_REMOVE_TAG, remove);
2270 }
2271 
2272 static inline int port_chk_ins_tag(struct ksz_hw *hw, int p)
2273 {
2274 	return port_chk(hw, p,
2275 		KS8842_PORT_CTRL_1_OFFSET, PORT_INSERT_TAG);
2276 }
2277 
2278 static inline int port_chk_rmv_tag(struct ksz_hw *hw, int p)
2279 {
2280 	return port_chk(hw, p,
2281 		KS8842_PORT_CTRL_1_OFFSET, PORT_REMOVE_TAG);
2282 }
2283 
2284 static inline void port_cfg_dis_non_vid(struct ksz_hw *hw, int p, int set)
2285 {
2286 	port_cfg(hw, p,
2287 		KS8842_PORT_CTRL_2_OFFSET, PORT_DISCARD_NON_VID, set);
2288 }
2289 
2290 static inline void port_cfg_in_filter(struct ksz_hw *hw, int p, int set)
2291 {
2292 	port_cfg(hw, p,
2293 		KS8842_PORT_CTRL_2_OFFSET, PORT_INGRESS_VLAN_FILTER, set);
2294 }
2295 
2296 static inline int port_chk_dis_non_vid(struct ksz_hw *hw, int p)
2297 {
2298 	return port_chk(hw, p,
2299 		KS8842_PORT_CTRL_2_OFFSET, PORT_DISCARD_NON_VID);
2300 }
2301 
2302 static inline int port_chk_in_filter(struct ksz_hw *hw, int p)
2303 {
2304 	return port_chk(hw, p,
2305 		KS8842_PORT_CTRL_2_OFFSET, PORT_INGRESS_VLAN_FILTER);
2306 }
2307 
2308 /* Mirroring */
2309 
2310 static inline void port_cfg_mirror_sniffer(struct ksz_hw *hw, int p, int set)
2311 {
2312 	port_cfg(hw, p,
2313 		KS8842_PORT_CTRL_2_OFFSET, PORT_MIRROR_SNIFFER, set);
2314 }
2315 
2316 static inline void port_cfg_mirror_rx(struct ksz_hw *hw, int p, int set)
2317 {
2318 	port_cfg(hw, p,
2319 		KS8842_PORT_CTRL_2_OFFSET, PORT_MIRROR_RX, set);
2320 }
2321 
2322 static inline void port_cfg_mirror_tx(struct ksz_hw *hw, int p, int set)
2323 {
2324 	port_cfg(hw, p,
2325 		KS8842_PORT_CTRL_2_OFFSET, PORT_MIRROR_TX, set);
2326 }
2327 
2328 static inline void sw_cfg_mirror_rx_tx(struct ksz_hw *hw, int set)
2329 {
2330 	sw_cfg(hw, KS8842_SWITCH_CTRL_2_OFFSET, SWITCH_MIRROR_RX_TX, set);
2331 }
2332 
2333 static void sw_init_mirror(struct ksz_hw *hw)
2334 {
2335 	int port;
2336 
2337 	for (port = 0; port < TOTAL_PORT_NUM; port++) {
2338 		port_cfg_mirror_sniffer(hw, port, 0);
2339 		port_cfg_mirror_rx(hw, port, 0);
2340 		port_cfg_mirror_tx(hw, port, 0);
2341 	}
2342 	sw_cfg_mirror_rx_tx(hw, 0);
2343 }
2344 
2345 static inline void sw_cfg_unk_def_deliver(struct ksz_hw *hw, int set)
2346 {
2347 	sw_cfg(hw, KS8842_SWITCH_CTRL_7_OFFSET,
2348 		SWITCH_UNK_DEF_PORT_ENABLE, set);
2349 }
2350 
2351 static inline int sw_cfg_chk_unk_def_deliver(struct ksz_hw *hw)
2352 {
2353 	return sw_chk(hw, KS8842_SWITCH_CTRL_7_OFFSET,
2354 		SWITCH_UNK_DEF_PORT_ENABLE);
2355 }
2356 
2357 static inline void sw_cfg_unk_def_port(struct ksz_hw *hw, int port, int set)
2358 {
2359 	port_cfg_shift(hw, port, KS8842_SWITCH_CTRL_7_OFFSET, 0, set);
2360 }
2361 
2362 static inline int sw_chk_unk_def_port(struct ksz_hw *hw, int port)
2363 {
2364 	return port_chk_shift(hw, port, KS8842_SWITCH_CTRL_7_OFFSET, 0);
2365 }
2366 
2367 /* Priority */
2368 
2369 static inline void port_cfg_diffserv(struct ksz_hw *hw, int p, int set)
2370 {
2371 	port_cfg(hw, p,
2372 		KS8842_PORT_CTRL_1_OFFSET, PORT_DIFFSERV_ENABLE, set);
2373 }
2374 
2375 static inline void port_cfg_802_1p(struct ksz_hw *hw, int p, int set)
2376 {
2377 	port_cfg(hw, p,
2378 		KS8842_PORT_CTRL_1_OFFSET, PORT_802_1P_ENABLE, set);
2379 }
2380 
2381 static inline void port_cfg_replace_vid(struct ksz_hw *hw, int p, int set)
2382 {
2383 	port_cfg(hw, p,
2384 		KS8842_PORT_CTRL_2_OFFSET, PORT_USER_PRIORITY_CEILING, set);
2385 }
2386 
2387 static inline void port_cfg_prio(struct ksz_hw *hw, int p, int set)
2388 {
2389 	port_cfg(hw, p,
2390 		KS8842_PORT_CTRL_1_OFFSET, PORT_PRIO_QUEUE_ENABLE, set);
2391 }
2392 
2393 static inline int port_chk_diffserv(struct ksz_hw *hw, int p)
2394 {
2395 	return port_chk(hw, p,
2396 		KS8842_PORT_CTRL_1_OFFSET, PORT_DIFFSERV_ENABLE);
2397 }
2398 
2399 static inline int port_chk_802_1p(struct ksz_hw *hw, int p)
2400 {
2401 	return port_chk(hw, p,
2402 		KS8842_PORT_CTRL_1_OFFSET, PORT_802_1P_ENABLE);
2403 }
2404 
2405 static inline int port_chk_replace_vid(struct ksz_hw *hw, int p)
2406 {
2407 	return port_chk(hw, p,
2408 		KS8842_PORT_CTRL_2_OFFSET, PORT_USER_PRIORITY_CEILING);
2409 }
2410 
2411 static inline int port_chk_prio(struct ksz_hw *hw, int p)
2412 {
2413 	return port_chk(hw, p,
2414 		KS8842_PORT_CTRL_1_OFFSET, PORT_PRIO_QUEUE_ENABLE);
2415 }
2416 
2417 /**
2418  * sw_dis_diffserv - disable switch DiffServ priority
2419  * @hw: 	The hardware instance.
2420  * @port:	The port index.
2421  *
2422  * This routine disables the DiffServ priority function of the switch.
2423  */
2424 static void sw_dis_diffserv(struct ksz_hw *hw, int port)
2425 {
2426 	port_cfg_diffserv(hw, port, 0);
2427 }
2428 
2429 /**
2430  * sw_dis_802_1p - disable switch 802.1p priority
2431  * @hw: 	The hardware instance.
2432  * @port:	The port index.
2433  *
2434  * This routine disables the 802.1p priority function of the switch.
2435  */
2436 static void sw_dis_802_1p(struct ksz_hw *hw, int port)
2437 {
2438 	port_cfg_802_1p(hw, port, 0);
2439 }
2440 
2441 /**
2442  * sw_cfg_replace_null_vid -
2443  * @hw: 	The hardware instance.
2444  * @set:	The flag to disable or enable.
2445  *
2446  */
2447 static void sw_cfg_replace_null_vid(struct ksz_hw *hw, int set)
2448 {
2449 	sw_cfg(hw, KS8842_SWITCH_CTRL_3_OFFSET, SWITCH_REPLACE_NULL_VID, set);
2450 }
2451 
2452 /**
2453  * sw_cfg_replace_vid - enable switch 802.10 priority re-mapping
2454  * @hw: 	The hardware instance.
2455  * @port:	The port index.
2456  * @set:	The flag to disable or enable.
2457  *
2458  * This routine enables the 802.1p priority re-mapping function of the switch.
2459  * That allows 802.1p priority field to be replaced with the port's default
2460  * tag's priority value if the ingress packet's 802.1p priority has a higher
2461  * priority than port's default tag's priority.
2462  */
2463 static void sw_cfg_replace_vid(struct ksz_hw *hw, int port, int set)
2464 {
2465 	port_cfg_replace_vid(hw, port, set);
2466 }
2467 
2468 /**
2469  * sw_cfg_port_based - configure switch port based priority
2470  * @hw: 	The hardware instance.
2471  * @port:	The port index.
2472  * @prio:	The priority to set.
2473  *
2474  * This routine configures the port based priority of the switch.
2475  */
2476 static void sw_cfg_port_based(struct ksz_hw *hw, int port, u8 prio)
2477 {
2478 	u16 data;
2479 
2480 	if (prio > PORT_BASED_PRIORITY_BASE)
2481 		prio = PORT_BASED_PRIORITY_BASE;
2482 
2483 	hw->ksz_switch->port_cfg[port].port_prio = prio;
2484 
2485 	port_r16(hw, port, KS8842_PORT_CTRL_1_OFFSET, &data);
2486 	data &= ~PORT_BASED_PRIORITY_MASK;
2487 	data |= prio << PORT_BASED_PRIORITY_SHIFT;
2488 	port_w16(hw, port, KS8842_PORT_CTRL_1_OFFSET, data);
2489 }
2490 
2491 /**
2492  * sw_dis_multi_queue - disable transmit multiple queues
2493  * @hw: 	The hardware instance.
2494  * @port:	The port index.
2495  *
2496  * This routine disables the transmit multiple queues selection of the switch
2497  * port.  Only single transmit queue on the port.
2498  */
2499 static void sw_dis_multi_queue(struct ksz_hw *hw, int port)
2500 {
2501 	port_cfg_prio(hw, port, 0);
2502 }
2503 
2504 /**
2505  * sw_init_prio - initialize switch priority
2506  * @hw: 	The hardware instance.
2507  *
2508  * This routine initializes the switch QoS priority functions.
2509  */
2510 static void sw_init_prio(struct ksz_hw *hw)
2511 {
2512 	int port;
2513 	int tos;
2514 	struct ksz_switch *sw = hw->ksz_switch;
2515 
2516 	/*
2517 	 * Init all the 802.1p tag priority value to be assigned to different
2518 	 * priority queue.
2519 	 */
2520 	sw->p_802_1p[0] = 0;
2521 	sw->p_802_1p[1] = 0;
2522 	sw->p_802_1p[2] = 1;
2523 	sw->p_802_1p[3] = 1;
2524 	sw->p_802_1p[4] = 2;
2525 	sw->p_802_1p[5] = 2;
2526 	sw->p_802_1p[6] = 3;
2527 	sw->p_802_1p[7] = 3;
2528 
2529 	/*
2530 	 * Init all the DiffServ priority value to be assigned to priority
2531 	 * queue 0.
2532 	 */
2533 	for (tos = 0; tos < DIFFSERV_ENTRIES; tos++)
2534 		sw->diffserv[tos] = 0;
2535 
2536 	/* All QoS functions disabled. */
2537 	for (port = 0; port < TOTAL_PORT_NUM; port++) {
2538 		sw_dis_multi_queue(hw, port);
2539 		sw_dis_diffserv(hw, port);
2540 		sw_dis_802_1p(hw, port);
2541 		sw_cfg_replace_vid(hw, port, 0);
2542 
2543 		sw->port_cfg[port].port_prio = 0;
2544 		sw_cfg_port_based(hw, port, sw->port_cfg[port].port_prio);
2545 	}
2546 	sw_cfg_replace_null_vid(hw, 0);
2547 }
2548 
2549 /**
2550  * port_get_def_vid - get port default VID.
2551  * @hw: 	The hardware instance.
2552  * @port:	The port index.
2553  * @vid:	Buffer to store the VID.
2554  *
2555  * This routine retrieves the default VID of the port.
2556  */
2557 static void port_get_def_vid(struct ksz_hw *hw, int port, u16 *vid)
2558 {
2559 	u32 addr;
2560 
2561 	PORT_CTRL_ADDR(port, addr);
2562 	addr += KS8842_PORT_CTRL_VID_OFFSET;
2563 	*vid = readw(hw->io + addr);
2564 }
2565 
2566 /**
2567  * sw_init_vlan - initialize switch VLAN
2568  * @hw: 	The hardware instance.
2569  *
2570  * This routine initializes the VLAN function of the switch.
2571  */
2572 static void sw_init_vlan(struct ksz_hw *hw)
2573 {
2574 	int port;
2575 	int entry;
2576 	struct ksz_switch *sw = hw->ksz_switch;
2577 
2578 	/* Read 16 VLAN entries from device's VLAN table. */
2579 	for (entry = 0; entry < VLAN_TABLE_ENTRIES; entry++) {
2580 		sw_r_vlan_table(hw, entry,
2581 			&sw->vlan_table[entry].vid,
2582 			&sw->vlan_table[entry].fid,
2583 			&sw->vlan_table[entry].member);
2584 	}
2585 
2586 	for (port = 0; port < TOTAL_PORT_NUM; port++) {
2587 		port_get_def_vid(hw, port, &sw->port_cfg[port].vid);
2588 		sw->port_cfg[port].member = PORT_MASK;
2589 	}
2590 }
2591 
2592 /**
2593  * sw_cfg_port_base_vlan - configure port-based VLAN membership
2594  * @hw: 	The hardware instance.
2595  * @port:	The port index.
2596  * @member:	The port-based VLAN membership.
2597  *
2598  * This routine configures the port-based VLAN membership of the port.
2599  */
2600 static void sw_cfg_port_base_vlan(struct ksz_hw *hw, int port, u8 member)
2601 {
2602 	u32 addr;
2603 	u8 data;
2604 
2605 	PORT_CTRL_ADDR(port, addr);
2606 	addr += KS8842_PORT_CTRL_2_OFFSET;
2607 
2608 	data = readb(hw->io + addr);
2609 	data &= ~PORT_VLAN_MEMBERSHIP;
2610 	data |= (member & PORT_MASK);
2611 	writeb(data, hw->io + addr);
2612 
2613 	hw->ksz_switch->port_cfg[port].member = member;
2614 }
2615 
2616 /**
2617  * sw_get_addr - get the switch MAC address.
2618  * @hw: 	The hardware instance.
2619  * @mac_addr:	Buffer to store the MAC address.
2620  *
2621  * This function retrieves the MAC address of the switch.
2622  */
2623 static inline void sw_get_addr(struct ksz_hw *hw, u8 *mac_addr)
2624 {
2625 	int i;
2626 
2627 	for (i = 0; i < 6; i += 2) {
2628 		mac_addr[i] = readb(hw->io + KS8842_MAC_ADDR_0_OFFSET + i);
2629 		mac_addr[1 + i] = readb(hw->io + KS8842_MAC_ADDR_1_OFFSET + i);
2630 	}
2631 }
2632 
2633 /**
2634  * sw_set_addr - configure switch MAC address
2635  * @hw: 	The hardware instance.
2636  * @mac_addr:	The MAC address.
2637  *
2638  * This function configures the MAC address of the switch.
2639  */
2640 static void sw_set_addr(struct ksz_hw *hw, u8 *mac_addr)
2641 {
2642 	int i;
2643 
2644 	for (i = 0; i < 6; i += 2) {
2645 		writeb(mac_addr[i], hw->io + KS8842_MAC_ADDR_0_OFFSET + i);
2646 		writeb(mac_addr[1 + i], hw->io + KS8842_MAC_ADDR_1_OFFSET + i);
2647 	}
2648 }
2649 
2650 /**
2651  * sw_set_global_ctrl - set switch global control
2652  * @hw: 	The hardware instance.
2653  *
2654  * This routine sets the global control of the switch function.
2655  */
2656 static void sw_set_global_ctrl(struct ksz_hw *hw)
2657 {
2658 	u16 data;
2659 
2660 	/* Enable switch MII flow control. */
2661 	data = readw(hw->io + KS8842_SWITCH_CTRL_3_OFFSET);
2662 	data |= SWITCH_FLOW_CTRL;
2663 	writew(data, hw->io + KS8842_SWITCH_CTRL_3_OFFSET);
2664 
2665 	data = readw(hw->io + KS8842_SWITCH_CTRL_1_OFFSET);
2666 
2667 	/* Enable aggressive back off algorithm in half duplex mode. */
2668 	data |= SWITCH_AGGR_BACKOFF;
2669 
2670 	/* Enable automatic fast aging when link changed detected. */
2671 	data |= SWITCH_AGING_ENABLE;
2672 	data |= SWITCH_LINK_AUTO_AGING;
2673 
2674 	if (hw->overrides & FAST_AGING)
2675 		data |= SWITCH_FAST_AGING;
2676 	else
2677 		data &= ~SWITCH_FAST_AGING;
2678 	writew(data, hw->io + KS8842_SWITCH_CTRL_1_OFFSET);
2679 
2680 	data = readw(hw->io + KS8842_SWITCH_CTRL_2_OFFSET);
2681 
2682 	/* Enable no excessive collision drop. */
2683 	data |= NO_EXC_COLLISION_DROP;
2684 	writew(data, hw->io + KS8842_SWITCH_CTRL_2_OFFSET);
2685 }
2686 
2687 enum {
2688 	STP_STATE_DISABLED = 0,
2689 	STP_STATE_LISTENING,
2690 	STP_STATE_LEARNING,
2691 	STP_STATE_FORWARDING,
2692 	STP_STATE_BLOCKED,
2693 	STP_STATE_SIMPLE
2694 };
2695 
2696 /**
2697  * port_set_stp_state - configure port spanning tree state
2698  * @hw: 	The hardware instance.
2699  * @port:	The port index.
2700  * @state:	The spanning tree state.
2701  *
2702  * This routine configures the spanning tree state of the port.
2703  */
2704 static void port_set_stp_state(struct ksz_hw *hw, int port, int state)
2705 {
2706 	u16 data;
2707 
2708 	port_r16(hw, port, KS8842_PORT_CTRL_2_OFFSET, &data);
2709 	switch (state) {
2710 	case STP_STATE_DISABLED:
2711 		data &= ~(PORT_TX_ENABLE | PORT_RX_ENABLE);
2712 		data |= PORT_LEARN_DISABLE;
2713 		break;
2714 	case STP_STATE_LISTENING:
2715 /*
2716  * No need to turn on transmit because of port direct mode.
2717  * Turning on receive is required if static MAC table is not setup.
2718  */
2719 		data &= ~PORT_TX_ENABLE;
2720 		data |= PORT_RX_ENABLE;
2721 		data |= PORT_LEARN_DISABLE;
2722 		break;
2723 	case STP_STATE_LEARNING:
2724 		data &= ~PORT_TX_ENABLE;
2725 		data |= PORT_RX_ENABLE;
2726 		data &= ~PORT_LEARN_DISABLE;
2727 		break;
2728 	case STP_STATE_FORWARDING:
2729 		data |= (PORT_TX_ENABLE | PORT_RX_ENABLE);
2730 		data &= ~PORT_LEARN_DISABLE;
2731 		break;
2732 	case STP_STATE_BLOCKED:
2733 /*
2734  * Need to setup static MAC table with override to keep receiving BPDU
2735  * messages.  See sw_init_stp routine.
2736  */
2737 		data &= ~(PORT_TX_ENABLE | PORT_RX_ENABLE);
2738 		data |= PORT_LEARN_DISABLE;
2739 		break;
2740 	case STP_STATE_SIMPLE:
2741 		data |= (PORT_TX_ENABLE | PORT_RX_ENABLE);
2742 		data |= PORT_LEARN_DISABLE;
2743 		break;
2744 	}
2745 	port_w16(hw, port, KS8842_PORT_CTRL_2_OFFSET, data);
2746 	hw->ksz_switch->port_cfg[port].stp_state = state;
2747 }
2748 
2749 #define STP_ENTRY			0
2750 #define BROADCAST_ENTRY			1
2751 #define BRIDGE_ADDR_ENTRY		2
2752 #define IPV6_ADDR_ENTRY			3
2753 
2754 /**
2755  * sw_clr_sta_mac_table - clear static MAC table
2756  * @hw: 	The hardware instance.
2757  *
2758  * This routine clears the static MAC table.
2759  */
2760 static void sw_clr_sta_mac_table(struct ksz_hw *hw)
2761 {
2762 	struct ksz_mac_table *entry;
2763 	int i;
2764 
2765 	for (i = 0; i < STATIC_MAC_TABLE_ENTRIES; i++) {
2766 		entry = &hw->ksz_switch->mac_table[i];
2767 		sw_w_sta_mac_table(hw, i,
2768 			entry->mac_addr, entry->ports,
2769 			entry->override, 0,
2770 			entry->use_fid, entry->fid);
2771 	}
2772 }
2773 
2774 /**
2775  * sw_init_stp - initialize switch spanning tree support
2776  * @hw: 	The hardware instance.
2777  *
2778  * This routine initializes the spanning tree support of the switch.
2779  */
2780 static void sw_init_stp(struct ksz_hw *hw)
2781 {
2782 	struct ksz_mac_table *entry;
2783 
2784 	entry = &hw->ksz_switch->mac_table[STP_ENTRY];
2785 	entry->mac_addr[0] = 0x01;
2786 	entry->mac_addr[1] = 0x80;
2787 	entry->mac_addr[2] = 0xC2;
2788 	entry->mac_addr[3] = 0x00;
2789 	entry->mac_addr[4] = 0x00;
2790 	entry->mac_addr[5] = 0x00;
2791 	entry->ports = HOST_MASK;
2792 	entry->override = 1;
2793 	entry->valid = 1;
2794 	sw_w_sta_mac_table(hw, STP_ENTRY,
2795 		entry->mac_addr, entry->ports,
2796 		entry->override, entry->valid,
2797 		entry->use_fid, entry->fid);
2798 }
2799 
2800 /**
2801  * sw_block_addr - block certain packets from the host port
2802  * @hw: 	The hardware instance.
2803  *
2804  * This routine blocks certain packets from reaching to the host port.
2805  */
2806 static void sw_block_addr(struct ksz_hw *hw)
2807 {
2808 	struct ksz_mac_table *entry;
2809 	int i;
2810 
2811 	for (i = BROADCAST_ENTRY; i <= IPV6_ADDR_ENTRY; i++) {
2812 		entry = &hw->ksz_switch->mac_table[i];
2813 		entry->valid = 0;
2814 		sw_w_sta_mac_table(hw, i,
2815 			entry->mac_addr, entry->ports,
2816 			entry->override, entry->valid,
2817 			entry->use_fid, entry->fid);
2818 	}
2819 }
2820 
2821 static inline void hw_r_phy_ctrl(struct ksz_hw *hw, int phy, u16 *data)
2822 {
2823 	*data = readw(hw->io + phy + KS884X_PHY_CTRL_OFFSET);
2824 }
2825 
2826 static inline void hw_w_phy_ctrl(struct ksz_hw *hw, int phy, u16 data)
2827 {
2828 	writew(data, hw->io + phy + KS884X_PHY_CTRL_OFFSET);
2829 }
2830 
2831 static inline void hw_r_phy_link_stat(struct ksz_hw *hw, int phy, u16 *data)
2832 {
2833 	*data = readw(hw->io + phy + KS884X_PHY_STATUS_OFFSET);
2834 }
2835 
2836 static inline void hw_r_phy_auto_neg(struct ksz_hw *hw, int phy, u16 *data)
2837 {
2838 	*data = readw(hw->io + phy + KS884X_PHY_AUTO_NEG_OFFSET);
2839 }
2840 
2841 static inline void hw_w_phy_auto_neg(struct ksz_hw *hw, int phy, u16 data)
2842 {
2843 	writew(data, hw->io + phy + KS884X_PHY_AUTO_NEG_OFFSET);
2844 }
2845 
2846 static inline void hw_r_phy_rem_cap(struct ksz_hw *hw, int phy, u16 *data)
2847 {
2848 	*data = readw(hw->io + phy + KS884X_PHY_REMOTE_CAP_OFFSET);
2849 }
2850 
2851 static inline void hw_r_phy_crossover(struct ksz_hw *hw, int phy, u16 *data)
2852 {
2853 	*data = readw(hw->io + phy + KS884X_PHY_CTRL_OFFSET);
2854 }
2855 
2856 static inline void hw_w_phy_crossover(struct ksz_hw *hw, int phy, u16 data)
2857 {
2858 	writew(data, hw->io + phy + KS884X_PHY_CTRL_OFFSET);
2859 }
2860 
2861 static inline void hw_r_phy_polarity(struct ksz_hw *hw, int phy, u16 *data)
2862 {
2863 	*data = readw(hw->io + phy + KS884X_PHY_PHY_CTRL_OFFSET);
2864 }
2865 
2866 static inline void hw_w_phy_polarity(struct ksz_hw *hw, int phy, u16 data)
2867 {
2868 	writew(data, hw->io + phy + KS884X_PHY_PHY_CTRL_OFFSET);
2869 }
2870 
2871 static inline void hw_r_phy_link_md(struct ksz_hw *hw, int phy, u16 *data)
2872 {
2873 	*data = readw(hw->io + phy + KS884X_PHY_LINK_MD_OFFSET);
2874 }
2875 
2876 static inline void hw_w_phy_link_md(struct ksz_hw *hw, int phy, u16 data)
2877 {
2878 	writew(data, hw->io + phy + KS884X_PHY_LINK_MD_OFFSET);
2879 }
2880 
2881 /**
2882  * hw_r_phy - read data from PHY register
2883  * @hw: 	The hardware instance.
2884  * @port:	Port to read.
2885  * @reg:	PHY register to read.
2886  * @val:	Buffer to store the read data.
2887  *
2888  * This routine reads data from the PHY register.
2889  */
2890 static void hw_r_phy(struct ksz_hw *hw, int port, u16 reg, u16 *val)
2891 {
2892 	int phy;
2893 
2894 	phy = KS884X_PHY_1_CTRL_OFFSET + port * PHY_CTRL_INTERVAL + reg;
2895 	*val = readw(hw->io + phy);
2896 }
2897 
2898 /**
2899  * hw_w_phy - write data to PHY register
2900  * @hw: 	The hardware instance.
2901  * @port:	Port to write.
2902  * @reg:	PHY register to write.
2903  * @val:	Word data to write.
2904  *
2905  * This routine writes data to the PHY register.
2906  */
2907 static void hw_w_phy(struct ksz_hw *hw, int port, u16 reg, u16 val)
2908 {
2909 	int phy;
2910 
2911 	phy = KS884X_PHY_1_CTRL_OFFSET + port * PHY_CTRL_INTERVAL + reg;
2912 	writew(val, hw->io + phy);
2913 }
2914 
2915 /*
2916  * EEPROM access functions
2917  */
2918 
2919 #define AT93C_CODE			0
2920 #define AT93C_WR_OFF			0x00
2921 #define AT93C_WR_ALL			0x10
2922 #define AT93C_ER_ALL			0x20
2923 #define AT93C_WR_ON			0x30
2924 
2925 #define AT93C_WRITE			1
2926 #define AT93C_READ			2
2927 #define AT93C_ERASE			3
2928 
2929 #define EEPROM_DELAY			4
2930 
2931 static inline void drop_gpio(struct ksz_hw *hw, u8 gpio)
2932 {
2933 	u16 data;
2934 
2935 	data = readw(hw->io + KS884X_EEPROM_CTRL_OFFSET);
2936 	data &= ~gpio;
2937 	writew(data, hw->io + KS884X_EEPROM_CTRL_OFFSET);
2938 }
2939 
2940 static inline void raise_gpio(struct ksz_hw *hw, u8 gpio)
2941 {
2942 	u16 data;
2943 
2944 	data = readw(hw->io + KS884X_EEPROM_CTRL_OFFSET);
2945 	data |= gpio;
2946 	writew(data, hw->io + KS884X_EEPROM_CTRL_OFFSET);
2947 }
2948 
2949 static inline u8 state_gpio(struct ksz_hw *hw, u8 gpio)
2950 {
2951 	u16 data;
2952 
2953 	data = readw(hw->io + KS884X_EEPROM_CTRL_OFFSET);
2954 	return (u8)(data & gpio);
2955 }
2956 
2957 static void eeprom_clk(struct ksz_hw *hw)
2958 {
2959 	raise_gpio(hw, EEPROM_SERIAL_CLOCK);
2960 	udelay(EEPROM_DELAY);
2961 	drop_gpio(hw, EEPROM_SERIAL_CLOCK);
2962 	udelay(EEPROM_DELAY);
2963 }
2964 
2965 static u16 spi_r(struct ksz_hw *hw)
2966 {
2967 	int i;
2968 	u16 temp = 0;
2969 
2970 	for (i = 15; i >= 0; i--) {
2971 		raise_gpio(hw, EEPROM_SERIAL_CLOCK);
2972 		udelay(EEPROM_DELAY);
2973 
2974 		temp |= (state_gpio(hw, EEPROM_DATA_IN)) ? 1 << i : 0;
2975 
2976 		drop_gpio(hw, EEPROM_SERIAL_CLOCK);
2977 		udelay(EEPROM_DELAY);
2978 	}
2979 	return temp;
2980 }
2981 
2982 static void spi_w(struct ksz_hw *hw, u16 data)
2983 {
2984 	int i;
2985 
2986 	for (i = 15; i >= 0; i--) {
2987 		(data & (0x01 << i)) ? raise_gpio(hw, EEPROM_DATA_OUT) :
2988 			drop_gpio(hw, EEPROM_DATA_OUT);
2989 		eeprom_clk(hw);
2990 	}
2991 }
2992 
2993 static void spi_reg(struct ksz_hw *hw, u8 data, u8 reg)
2994 {
2995 	int i;
2996 
2997 	/* Initial start bit */
2998 	raise_gpio(hw, EEPROM_DATA_OUT);
2999 	eeprom_clk(hw);
3000 
3001 	/* AT93C operation */
3002 	for (i = 1; i >= 0; i--) {
3003 		(data & (0x01 << i)) ? raise_gpio(hw, EEPROM_DATA_OUT) :
3004 			drop_gpio(hw, EEPROM_DATA_OUT);
3005 		eeprom_clk(hw);
3006 	}
3007 
3008 	/* Address location */
3009 	for (i = 5; i >= 0; i--) {
3010 		(reg & (0x01 << i)) ? raise_gpio(hw, EEPROM_DATA_OUT) :
3011 			drop_gpio(hw, EEPROM_DATA_OUT);
3012 		eeprom_clk(hw);
3013 	}
3014 }
3015 
3016 #define EEPROM_DATA_RESERVED		0
3017 #define EEPROM_DATA_MAC_ADDR_0		1
3018 #define EEPROM_DATA_MAC_ADDR_1		2
3019 #define EEPROM_DATA_MAC_ADDR_2		3
3020 #define EEPROM_DATA_SUBSYS_ID		4
3021 #define EEPROM_DATA_SUBSYS_VEN_ID	5
3022 #define EEPROM_DATA_PM_CAP		6
3023 
3024 /* User defined EEPROM data */
3025 #define EEPROM_DATA_OTHER_MAC_ADDR	9
3026 
3027 /**
3028  * eeprom_read - read from AT93C46 EEPROM
3029  * @hw: 	The hardware instance.
3030  * @reg:	The register offset.
3031  *
3032  * This function reads a word from the AT93C46 EEPROM.
3033  *
3034  * Return the data value.
3035  */
3036 static u16 eeprom_read(struct ksz_hw *hw, u8 reg)
3037 {
3038 	u16 data;
3039 
3040 	raise_gpio(hw, EEPROM_ACCESS_ENABLE | EEPROM_CHIP_SELECT);
3041 
3042 	spi_reg(hw, AT93C_READ, reg);
3043 	data = spi_r(hw);
3044 
3045 	drop_gpio(hw, EEPROM_ACCESS_ENABLE | EEPROM_CHIP_SELECT);
3046 
3047 	return data;
3048 }
3049 
3050 /**
3051  * eeprom_write - write to AT93C46 EEPROM
3052  * @hw: 	The hardware instance.
3053  * @reg:	The register offset.
3054  * @data:	The data value.
3055  *
3056  * This procedure writes a word to the AT93C46 EEPROM.
3057  */
3058 static void eeprom_write(struct ksz_hw *hw, u8 reg, u16 data)
3059 {
3060 	int timeout;
3061 
3062 	raise_gpio(hw, EEPROM_ACCESS_ENABLE | EEPROM_CHIP_SELECT);
3063 
3064 	/* Enable write. */
3065 	spi_reg(hw, AT93C_CODE, AT93C_WR_ON);
3066 	drop_gpio(hw, EEPROM_CHIP_SELECT);
3067 	udelay(1);
3068 
3069 	/* Erase the register. */
3070 	raise_gpio(hw, EEPROM_CHIP_SELECT);
3071 	spi_reg(hw, AT93C_ERASE, reg);
3072 	drop_gpio(hw, EEPROM_CHIP_SELECT);
3073 	udelay(1);
3074 
3075 	/* Check operation complete. */
3076 	raise_gpio(hw, EEPROM_CHIP_SELECT);
3077 	timeout = 8;
3078 	mdelay(2);
3079 	do {
3080 		mdelay(1);
3081 	} while (!state_gpio(hw, EEPROM_DATA_IN) && --timeout);
3082 	drop_gpio(hw, EEPROM_CHIP_SELECT);
3083 	udelay(1);
3084 
3085 	/* Write the register. */
3086 	raise_gpio(hw, EEPROM_CHIP_SELECT);
3087 	spi_reg(hw, AT93C_WRITE, reg);
3088 	spi_w(hw, data);
3089 	drop_gpio(hw, EEPROM_CHIP_SELECT);
3090 	udelay(1);
3091 
3092 	/* Check operation complete. */
3093 	raise_gpio(hw, EEPROM_CHIP_SELECT);
3094 	timeout = 8;
3095 	mdelay(2);
3096 	do {
3097 		mdelay(1);
3098 	} while (!state_gpio(hw, EEPROM_DATA_IN) && --timeout);
3099 	drop_gpio(hw, EEPROM_CHIP_SELECT);
3100 	udelay(1);
3101 
3102 	/* Disable write. */
3103 	raise_gpio(hw, EEPROM_CHIP_SELECT);
3104 	spi_reg(hw, AT93C_CODE, AT93C_WR_OFF);
3105 
3106 	drop_gpio(hw, EEPROM_ACCESS_ENABLE | EEPROM_CHIP_SELECT);
3107 }
3108 
3109 /*
3110  * Link detection routines
3111  */
3112 
3113 static u16 advertised_flow_ctrl(struct ksz_port *port, u16 ctrl)
3114 {
3115 	ctrl &= ~PORT_AUTO_NEG_SYM_PAUSE;
3116 	switch (port->flow_ctrl) {
3117 	case PHY_FLOW_CTRL:
3118 		ctrl |= PORT_AUTO_NEG_SYM_PAUSE;
3119 		break;
3120 	/* Not supported. */
3121 	case PHY_TX_ONLY:
3122 	case PHY_RX_ONLY:
3123 	default:
3124 		break;
3125 	}
3126 	return ctrl;
3127 }
3128 
3129 static void set_flow_ctrl(struct ksz_hw *hw, int rx, int tx)
3130 {
3131 	u32 rx_cfg;
3132 	u32 tx_cfg;
3133 
3134 	rx_cfg = hw->rx_cfg;
3135 	tx_cfg = hw->tx_cfg;
3136 	if (rx)
3137 		hw->rx_cfg |= DMA_RX_FLOW_ENABLE;
3138 	else
3139 		hw->rx_cfg &= ~DMA_RX_FLOW_ENABLE;
3140 	if (tx)
3141 		hw->tx_cfg |= DMA_TX_FLOW_ENABLE;
3142 	else
3143 		hw->tx_cfg &= ~DMA_TX_FLOW_ENABLE;
3144 	if (hw->enabled) {
3145 		if (rx_cfg != hw->rx_cfg)
3146 			writel(hw->rx_cfg, hw->io + KS_DMA_RX_CTRL);
3147 		if (tx_cfg != hw->tx_cfg)
3148 			writel(hw->tx_cfg, hw->io + KS_DMA_TX_CTRL);
3149 	}
3150 }
3151 
3152 static void determine_flow_ctrl(struct ksz_hw *hw, struct ksz_port *port,
3153 	u16 local, u16 remote)
3154 {
3155 	int rx;
3156 	int tx;
3157 
3158 	if (hw->overrides & PAUSE_FLOW_CTRL)
3159 		return;
3160 
3161 	rx = tx = 0;
3162 	if (port->force_link)
3163 		rx = tx = 1;
3164 	if (remote & LPA_PAUSE_CAP) {
3165 		if (local & ADVERTISE_PAUSE_CAP) {
3166 			rx = tx = 1;
3167 		} else if ((remote & LPA_PAUSE_ASYM) &&
3168 			   (local &
3169 			    (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM)) ==
3170 			   ADVERTISE_PAUSE_ASYM) {
3171 			tx = 1;
3172 		}
3173 	} else if (remote & LPA_PAUSE_ASYM) {
3174 		if ((local & (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM))
3175 		    == (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM))
3176 			rx = 1;
3177 	}
3178 	if (!hw->ksz_switch)
3179 		set_flow_ctrl(hw, rx, tx);
3180 }
3181 
3182 static inline void port_cfg_change(struct ksz_hw *hw, struct ksz_port *port,
3183 	struct ksz_port_info *info, u16 link_status)
3184 {
3185 	if ((hw->features & HALF_DUPLEX_SIGNAL_BUG) &&
3186 			!(hw->overrides & PAUSE_FLOW_CTRL)) {
3187 		u32 cfg = hw->tx_cfg;
3188 
3189 		/* Disable flow control in the half duplex mode. */
3190 		if (1 == info->duplex)
3191 			hw->tx_cfg &= ~DMA_TX_FLOW_ENABLE;
3192 		if (hw->enabled && cfg != hw->tx_cfg)
3193 			writel(hw->tx_cfg, hw->io + KS_DMA_TX_CTRL);
3194 	}
3195 }
3196 
3197 /**
3198  * port_get_link_speed - get current link status
3199  * @port: 	The port instance.
3200  *
3201  * This routine reads PHY registers to determine the current link status of the
3202  * switch ports.
3203  */
3204 static void port_get_link_speed(struct ksz_port *port)
3205 {
3206 	uint interrupt;
3207 	struct ksz_port_info *info;
3208 	struct ksz_port_info *linked = NULL;
3209 	struct ksz_hw *hw = port->hw;
3210 	u16 data;
3211 	u16 status;
3212 	u8 local;
3213 	u8 remote;
3214 	int i;
3215 	int p;
3216 
3217 	interrupt = hw_block_intr(hw);
3218 
3219 	for (i = 0, p = port->first_port; i < port->port_cnt; i++, p++) {
3220 		info = &hw->port_info[p];
3221 		port_r16(hw, p, KS884X_PORT_CTRL_4_OFFSET, &data);
3222 		port_r16(hw, p, KS884X_PORT_STATUS_OFFSET, &status);
3223 
3224 		/*
3225 		 * Link status is changing all the time even when there is no
3226 		 * cable connection!
3227 		 */
3228 		remote = status & (PORT_AUTO_NEG_COMPLETE |
3229 			PORT_STATUS_LINK_GOOD);
3230 		local = (u8) data;
3231 
3232 		/* No change to status. */
3233 		if (local == info->advertised && remote == info->partner)
3234 			continue;
3235 
3236 		info->advertised = local;
3237 		info->partner = remote;
3238 		if (status & PORT_STATUS_LINK_GOOD) {
3239 
3240 			/* Remember the first linked port. */
3241 			if (!linked)
3242 				linked = info;
3243 
3244 			info->tx_rate = 10 * TX_RATE_UNIT;
3245 			if (status & PORT_STATUS_SPEED_100MBIT)
3246 				info->tx_rate = 100 * TX_RATE_UNIT;
3247 
3248 			info->duplex = 1;
3249 			if (status & PORT_STATUS_FULL_DUPLEX)
3250 				info->duplex = 2;
3251 
3252 			if (media_connected != info->state) {
3253 				hw_r_phy(hw, p, KS884X_PHY_AUTO_NEG_OFFSET,
3254 					&data);
3255 				hw_r_phy(hw, p, KS884X_PHY_REMOTE_CAP_OFFSET,
3256 					&status);
3257 				determine_flow_ctrl(hw, port, data, status);
3258 				if (hw->ksz_switch) {
3259 					port_cfg_back_pressure(hw, p,
3260 						(1 == info->duplex));
3261 				}
3262 				port_cfg_change(hw, port, info, status);
3263 			}
3264 			info->state = media_connected;
3265 		} else {
3266 			/* Indicate the link just goes down. */
3267 			if (media_disconnected != info->state)
3268 				hw->port_mib[p].link_down = 1;
3269 
3270 			info->state = media_disconnected;
3271 		}
3272 		hw->port_mib[p].state = (u8) info->state;
3273 	}
3274 
3275 	if (linked && media_disconnected == port->linked->state)
3276 		port->linked = linked;
3277 
3278 	hw_restore_intr(hw, interrupt);
3279 }
3280 
3281 #define PHY_RESET_TIMEOUT		10
3282 
3283 /**
3284  * port_set_link_speed - set port speed
3285  * @port: 	The port instance.
3286  *
3287  * This routine sets the link speed of the switch ports.
3288  */
3289 static void port_set_link_speed(struct ksz_port *port)
3290 {
3291 	struct ksz_hw *hw = port->hw;
3292 	u16 data;
3293 	u16 cfg;
3294 	u8 status;
3295 	int i;
3296 	int p;
3297 
3298 	for (i = 0, p = port->first_port; i < port->port_cnt; i++, p++) {
3299 		port_r16(hw, p, KS884X_PORT_CTRL_4_OFFSET, &data);
3300 		port_r8(hw, p, KS884X_PORT_STATUS_OFFSET, &status);
3301 
3302 		cfg = 0;
3303 		if (status & PORT_STATUS_LINK_GOOD)
3304 			cfg = data;
3305 
3306 		data |= PORT_AUTO_NEG_ENABLE;
3307 		data = advertised_flow_ctrl(port, data);
3308 
3309 		data |= PORT_AUTO_NEG_100BTX_FD | PORT_AUTO_NEG_100BTX |
3310 			PORT_AUTO_NEG_10BT_FD | PORT_AUTO_NEG_10BT;
3311 
3312 		/* Check if manual configuration is specified by the user. */
3313 		if (port->speed || port->duplex) {
3314 			if (10 == port->speed)
3315 				data &= ~(PORT_AUTO_NEG_100BTX_FD |
3316 					PORT_AUTO_NEG_100BTX);
3317 			else if (100 == port->speed)
3318 				data &= ~(PORT_AUTO_NEG_10BT_FD |
3319 					PORT_AUTO_NEG_10BT);
3320 			if (1 == port->duplex)
3321 				data &= ~(PORT_AUTO_NEG_100BTX_FD |
3322 					PORT_AUTO_NEG_10BT_FD);
3323 			else if (2 == port->duplex)
3324 				data &= ~(PORT_AUTO_NEG_100BTX |
3325 					PORT_AUTO_NEG_10BT);
3326 		}
3327 		if (data != cfg) {
3328 			data |= PORT_AUTO_NEG_RESTART;
3329 			port_w16(hw, p, KS884X_PORT_CTRL_4_OFFSET, data);
3330 		}
3331 	}
3332 }
3333 
3334 /**
3335  * port_force_link_speed - force port speed
3336  * @port: 	The port instance.
3337  *
3338  * This routine forces the link speed of the switch ports.
3339  */
3340 static void port_force_link_speed(struct ksz_port *port)
3341 {
3342 	struct ksz_hw *hw = port->hw;
3343 	u16 data;
3344 	int i;
3345 	int phy;
3346 	int p;
3347 
3348 	for (i = 0, p = port->first_port; i < port->port_cnt; i++, p++) {
3349 		phy = KS884X_PHY_1_CTRL_OFFSET + p * PHY_CTRL_INTERVAL;
3350 		hw_r_phy_ctrl(hw, phy, &data);
3351 
3352 		data &= ~BMCR_ANENABLE;
3353 
3354 		if (10 == port->speed)
3355 			data &= ~BMCR_SPEED100;
3356 		else if (100 == port->speed)
3357 			data |= BMCR_SPEED100;
3358 		if (1 == port->duplex)
3359 			data &= ~BMCR_FULLDPLX;
3360 		else if (2 == port->duplex)
3361 			data |= BMCR_FULLDPLX;
3362 		hw_w_phy_ctrl(hw, phy, data);
3363 	}
3364 }
3365 
3366 static void port_set_power_saving(struct ksz_port *port, int enable)
3367 {
3368 	struct ksz_hw *hw = port->hw;
3369 	int i;
3370 	int p;
3371 
3372 	for (i = 0, p = port->first_port; i < port->port_cnt; i++, p++)
3373 		port_cfg(hw, p,
3374 			KS884X_PORT_CTRL_4_OFFSET, PORT_POWER_DOWN, enable);
3375 }
3376 
3377 /*
3378  * KSZ8841 power management functions
3379  */
3380 
3381 /**
3382  * hw_chk_wol_pme_status - check PMEN pin
3383  * @hw: 	The hardware instance.
3384  *
3385  * This function is used to check PMEN pin is asserted.
3386  *
3387  * Return 1 if PMEN pin is asserted; otherwise, 0.
3388  */
3389 static int hw_chk_wol_pme_status(struct ksz_hw *hw)
3390 {
3391 	struct dev_info *hw_priv = container_of(hw, struct dev_info, hw);
3392 	struct pci_dev *pdev = hw_priv->pdev;
3393 	u16 data;
3394 
3395 	if (!pdev->pm_cap)
3396 		return 0;
3397 	pci_read_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, &data);
3398 	return (data & PCI_PM_CTRL_PME_STATUS) == PCI_PM_CTRL_PME_STATUS;
3399 }
3400 
3401 /**
3402  * hw_clr_wol_pme_status - clear PMEN pin
3403  * @hw: 	The hardware instance.
3404  *
3405  * This routine is used to clear PME_Status to deassert PMEN pin.
3406  */
3407 static void hw_clr_wol_pme_status(struct ksz_hw *hw)
3408 {
3409 	struct dev_info *hw_priv = container_of(hw, struct dev_info, hw);
3410 	struct pci_dev *pdev = hw_priv->pdev;
3411 	u16 data;
3412 
3413 	if (!pdev->pm_cap)
3414 		return;
3415 
3416 	/* Clear PME_Status to deassert PMEN pin. */
3417 	pci_read_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, &data);
3418 	data |= PCI_PM_CTRL_PME_STATUS;
3419 	pci_write_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, data);
3420 }
3421 
3422 /**
3423  * hw_cfg_wol_pme - enable or disable Wake-on-LAN
3424  * @hw: 	The hardware instance.
3425  * @set:	The flag indicating whether to enable or disable.
3426  *
3427  * This routine is used to enable or disable Wake-on-LAN.
3428  */
3429 static void hw_cfg_wol_pme(struct ksz_hw *hw, int set)
3430 {
3431 	struct dev_info *hw_priv = container_of(hw, struct dev_info, hw);
3432 	struct pci_dev *pdev = hw_priv->pdev;
3433 	u16 data;
3434 
3435 	if (!pdev->pm_cap)
3436 		return;
3437 	pci_read_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, &data);
3438 	data &= ~PCI_PM_CTRL_STATE_MASK;
3439 	if (set)
3440 		data |= PCI_PM_CTRL_PME_ENABLE | PCI_D3hot;
3441 	else
3442 		data &= ~PCI_PM_CTRL_PME_ENABLE;
3443 	pci_write_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, data);
3444 }
3445 
3446 /**
3447  * hw_cfg_wol - configure Wake-on-LAN features
3448  * @hw: 	The hardware instance.
3449  * @frame:	The pattern frame bit.
3450  * @set:	The flag indicating whether to enable or disable.
3451  *
3452  * This routine is used to enable or disable certain Wake-on-LAN features.
3453  */
3454 static void hw_cfg_wol(struct ksz_hw *hw, u16 frame, int set)
3455 {
3456 	u16 data;
3457 
3458 	data = readw(hw->io + KS8841_WOL_CTRL_OFFSET);
3459 	if (set)
3460 		data |= frame;
3461 	else
3462 		data &= ~frame;
3463 	writew(data, hw->io + KS8841_WOL_CTRL_OFFSET);
3464 }
3465 
3466 /**
3467  * hw_set_wol_frame - program Wake-on-LAN pattern
3468  * @hw: 	The hardware instance.
3469  * @i:		The frame index.
3470  * @mask_size:	The size of the mask.
3471  * @mask:	Mask to ignore certain bytes in the pattern.
3472  * @frame_size:	The size of the frame.
3473  * @pattern:	The frame data.
3474  *
3475  * This routine is used to program Wake-on-LAN pattern.
3476  */
3477 static void hw_set_wol_frame(struct ksz_hw *hw, int i, uint mask_size,
3478 	const u8 *mask, uint frame_size, const u8 *pattern)
3479 {
3480 	int bits;
3481 	int from;
3482 	int len;
3483 	int to;
3484 	u32 crc;
3485 	u8 data[64];
3486 	u8 val = 0;
3487 
3488 	if (frame_size > mask_size * 8)
3489 		frame_size = mask_size * 8;
3490 	if (frame_size > 64)
3491 		frame_size = 64;
3492 
3493 	i *= 0x10;
3494 	writel(0, hw->io + KS8841_WOL_FRAME_BYTE0_OFFSET + i);
3495 	writel(0, hw->io + KS8841_WOL_FRAME_BYTE2_OFFSET + i);
3496 
3497 	bits = len = from = to = 0;
3498 	do {
3499 		if (bits) {
3500 			if ((val & 1))
3501 				data[to++] = pattern[from];
3502 			val >>= 1;
3503 			++from;
3504 			--bits;
3505 		} else {
3506 			val = mask[len];
3507 			writeb(val, hw->io + KS8841_WOL_FRAME_BYTE0_OFFSET + i
3508 				+ len);
3509 			++len;
3510 			if (val)
3511 				bits = 8;
3512 			else
3513 				from += 8;
3514 		}
3515 	} while (from < (int) frame_size);
3516 	if (val) {
3517 		bits = mask[len - 1];
3518 		val <<= (from % 8);
3519 		bits &= ~val;
3520 		writeb(bits, hw->io + KS8841_WOL_FRAME_BYTE0_OFFSET + i + len -
3521 			1);
3522 	}
3523 	crc = ether_crc(to, data);
3524 	writel(crc, hw->io + KS8841_WOL_FRAME_CRC_OFFSET + i);
3525 }
3526 
3527 /**
3528  * hw_add_wol_arp - add ARP pattern
3529  * @hw: 	The hardware instance.
3530  * @ip_addr:	The IPv4 address assigned to the device.
3531  *
3532  * This routine is used to add ARP pattern for waking up the host.
3533  */
3534 static void hw_add_wol_arp(struct ksz_hw *hw, const u8 *ip_addr)
3535 {
3536 	static const u8 mask[6] = { 0x3F, 0xF0, 0x3F, 0x00, 0xC0, 0x03 };
3537 	u8 pattern[42] = {
3538 		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
3539 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3540 		0x08, 0x06,
3541 		0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01,
3542 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3543 		0x00, 0x00, 0x00, 0x00,
3544 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3545 		0x00, 0x00, 0x00, 0x00 };
3546 
3547 	memcpy(&pattern[38], ip_addr, 4);
3548 	hw_set_wol_frame(hw, 3, 6, mask, 42, pattern);
3549 }
3550 
3551 /**
3552  * hw_add_wol_bcast - add broadcast pattern
3553  * @hw: 	The hardware instance.
3554  *
3555  * This routine is used to add broadcast pattern for waking up the host.
3556  */
3557 static void hw_add_wol_bcast(struct ksz_hw *hw)
3558 {
3559 	static const u8 mask[] = { 0x3F };
3560 	static const u8 pattern[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
3561 
3562 	hw_set_wol_frame(hw, 2, 1, mask, ETH_ALEN, pattern);
3563 }
3564 
3565 /**
3566  * hw_add_wol_mcast - add multicast pattern
3567  * @hw: 	The hardware instance.
3568  *
3569  * This routine is used to add multicast pattern for waking up the host.
3570  *
3571  * It is assumed the multicast packet is the ICMPv6 neighbor solicitation used
3572  * by IPv6 ping command.  Note that multicast packets are filtred through the
3573  * multicast hash table, so not all multicast packets can wake up the host.
3574  */
3575 static void hw_add_wol_mcast(struct ksz_hw *hw)
3576 {
3577 	static const u8 mask[] = { 0x3F };
3578 	u8 pattern[] = { 0x33, 0x33, 0xFF, 0x00, 0x00, 0x00 };
3579 
3580 	memcpy(&pattern[3], &hw->override_addr[3], 3);
3581 	hw_set_wol_frame(hw, 1, 1, mask, 6, pattern);
3582 }
3583 
3584 /**
3585  * hw_add_wol_ucast - add unicast pattern
3586  * @hw: 	The hardware instance.
3587  *
3588  * This routine is used to add unicast pattern to wakeup the host.
3589  *
3590  * It is assumed the unicast packet is directed to the device, as the hardware
3591  * can only receive them in normal case.
3592  */
3593 static void hw_add_wol_ucast(struct ksz_hw *hw)
3594 {
3595 	static const u8 mask[] = { 0x3F };
3596 
3597 	hw_set_wol_frame(hw, 0, 1, mask, ETH_ALEN, hw->override_addr);
3598 }
3599 
3600 /**
3601  * hw_enable_wol - enable Wake-on-LAN
3602  * @hw: 	The hardware instance.
3603  * @wol_enable:	The Wake-on-LAN settings.
3604  * @net_addr:	The IPv4 address assigned to the device.
3605  *
3606  * This routine is used to enable Wake-on-LAN depending on driver settings.
3607  */
3608 static void hw_enable_wol(struct ksz_hw *hw, u32 wol_enable, const u8 *net_addr)
3609 {
3610 	hw_cfg_wol(hw, KS8841_WOL_MAGIC_ENABLE, (wol_enable & WAKE_MAGIC));
3611 	hw_cfg_wol(hw, KS8841_WOL_FRAME0_ENABLE, (wol_enable & WAKE_UCAST));
3612 	hw_add_wol_ucast(hw);
3613 	hw_cfg_wol(hw, KS8841_WOL_FRAME1_ENABLE, (wol_enable & WAKE_MCAST));
3614 	hw_add_wol_mcast(hw);
3615 	hw_cfg_wol(hw, KS8841_WOL_FRAME2_ENABLE, (wol_enable & WAKE_BCAST));
3616 	hw_cfg_wol(hw, KS8841_WOL_FRAME3_ENABLE, (wol_enable & WAKE_ARP));
3617 	hw_add_wol_arp(hw, net_addr);
3618 }
3619 
3620 /**
3621  * hw_init - check driver is correct for the hardware
3622  * @hw: 	The hardware instance.
3623  *
3624  * This function checks the hardware is correct for this driver and sets the
3625  * hardware up for proper initialization.
3626  *
3627  * Return number of ports or 0 if not right.
3628  */
3629 static int hw_init(struct ksz_hw *hw)
3630 {
3631 	int rc = 0;
3632 	u16 data;
3633 	u16 revision;
3634 
3635 	/* Set bus speed to 125MHz. */
3636 	writew(BUS_SPEED_125_MHZ, hw->io + KS884X_BUS_CTRL_OFFSET);
3637 
3638 	/* Check KSZ884x chip ID. */
3639 	data = readw(hw->io + KS884X_CHIP_ID_OFFSET);
3640 
3641 	revision = (data & KS884X_REVISION_MASK) >> KS884X_REVISION_SHIFT;
3642 	data &= KS884X_CHIP_ID_MASK_41;
3643 	if (REG_CHIP_ID_41 == data)
3644 		rc = 1;
3645 	else if (REG_CHIP_ID_42 == data)
3646 		rc = 2;
3647 	else
3648 		return 0;
3649 
3650 	/* Setup hardware features or bug workarounds. */
3651 	if (revision <= 1) {
3652 		hw->features |= SMALL_PACKET_TX_BUG;
3653 		if (1 == rc)
3654 			hw->features |= HALF_DUPLEX_SIGNAL_BUG;
3655 	}
3656 	return rc;
3657 }
3658 
3659 /**
3660  * hw_reset - reset the hardware
3661  * @hw: 	The hardware instance.
3662  *
3663  * This routine resets the hardware.
3664  */
3665 static void hw_reset(struct ksz_hw *hw)
3666 {
3667 	writew(GLOBAL_SOFTWARE_RESET, hw->io + KS884X_GLOBAL_CTRL_OFFSET);
3668 
3669 	/* Wait for device to reset. */
3670 	mdelay(10);
3671 
3672 	/* Write 0 to clear device reset. */
3673 	writew(0, hw->io + KS884X_GLOBAL_CTRL_OFFSET);
3674 }
3675 
3676 /**
3677  * hw_setup - setup the hardware
3678  * @hw: 	The hardware instance.
3679  *
3680  * This routine setup the hardware for proper operation.
3681  */
3682 static void hw_setup(struct ksz_hw *hw)
3683 {
3684 #if SET_DEFAULT_LED
3685 	u16 data;
3686 
3687 	/* Change default LED mode. */
3688 	data = readw(hw->io + KS8842_SWITCH_CTRL_5_OFFSET);
3689 	data &= ~LED_MODE;
3690 	data |= SET_DEFAULT_LED;
3691 	writew(data, hw->io + KS8842_SWITCH_CTRL_5_OFFSET);
3692 #endif
3693 
3694 	/* Setup transmit control. */
3695 	hw->tx_cfg = (DMA_TX_PAD_ENABLE | DMA_TX_CRC_ENABLE |
3696 		(DMA_BURST_DEFAULT << DMA_BURST_SHIFT) | DMA_TX_ENABLE);
3697 
3698 	/* Setup receive control. */
3699 	hw->rx_cfg = (DMA_RX_BROADCAST | DMA_RX_UNICAST |
3700 		(DMA_BURST_DEFAULT << DMA_BURST_SHIFT) | DMA_RX_ENABLE);
3701 	hw->rx_cfg |= KS884X_DMA_RX_MULTICAST;
3702 
3703 	/* Hardware cannot handle UDP packet in IP fragments. */
3704 	hw->rx_cfg |= (DMA_RX_CSUM_TCP | DMA_RX_CSUM_IP);
3705 
3706 	if (hw->all_multi)
3707 		hw->rx_cfg |= DMA_RX_ALL_MULTICAST;
3708 	if (hw->promiscuous)
3709 		hw->rx_cfg |= DMA_RX_PROMISCUOUS;
3710 }
3711 
3712 /**
3713  * hw_setup_intr - setup interrupt mask
3714  * @hw: 	The hardware instance.
3715  *
3716  * This routine setup the interrupt mask for proper operation.
3717  */
3718 static void hw_setup_intr(struct ksz_hw *hw)
3719 {
3720 	hw->intr_mask = KS884X_INT_MASK | KS884X_INT_RX_OVERRUN;
3721 }
3722 
3723 static void ksz_check_desc_num(struct ksz_desc_info *info)
3724 {
3725 #define MIN_DESC_SHIFT  2
3726 
3727 	int alloc = info->alloc;
3728 	int shift;
3729 
3730 	shift = 0;
3731 	while (!(alloc & 1)) {
3732 		shift++;
3733 		alloc >>= 1;
3734 	}
3735 	if (alloc != 1 || shift < MIN_DESC_SHIFT) {
3736 		pr_alert("Hardware descriptor numbers not right!\n");
3737 		while (alloc) {
3738 			shift++;
3739 			alloc >>= 1;
3740 		}
3741 		if (shift < MIN_DESC_SHIFT)
3742 			shift = MIN_DESC_SHIFT;
3743 		alloc = 1 << shift;
3744 		info->alloc = alloc;
3745 	}
3746 	info->mask = info->alloc - 1;
3747 }
3748 
3749 static void hw_init_desc(struct ksz_desc_info *desc_info, int transmit)
3750 {
3751 	int i;
3752 	u32 phys = desc_info->ring_phys;
3753 	struct ksz_hw_desc *desc = desc_info->ring_virt;
3754 	struct ksz_desc *cur = desc_info->ring;
3755 	struct ksz_desc *previous = NULL;
3756 
3757 	for (i = 0; i < desc_info->alloc; i++) {
3758 		cur->phw = desc++;
3759 		phys += desc_info->size;
3760 		previous = cur++;
3761 		previous->phw->next = cpu_to_le32(phys);
3762 	}
3763 	previous->phw->next = cpu_to_le32(desc_info->ring_phys);
3764 	previous->sw.buf.rx.end_of_ring = 1;
3765 	previous->phw->buf.data = cpu_to_le32(previous->sw.buf.data);
3766 
3767 	desc_info->avail = desc_info->alloc;
3768 	desc_info->last = desc_info->next = 0;
3769 
3770 	desc_info->cur = desc_info->ring;
3771 }
3772 
3773 /**
3774  * hw_set_desc_base - set descriptor base addresses
3775  * @hw: 	The hardware instance.
3776  * @tx_addr:	The transmit descriptor base.
3777  * @rx_addr:	The receive descriptor base.
3778  *
3779  * This routine programs the descriptor base addresses after reset.
3780  */
3781 static void hw_set_desc_base(struct ksz_hw *hw, u32 tx_addr, u32 rx_addr)
3782 {
3783 	/* Set base address of Tx/Rx descriptors. */
3784 	writel(tx_addr, hw->io + KS_DMA_TX_ADDR);
3785 	writel(rx_addr, hw->io + KS_DMA_RX_ADDR);
3786 }
3787 
3788 static void hw_reset_pkts(struct ksz_desc_info *info)
3789 {
3790 	info->cur = info->ring;
3791 	info->avail = info->alloc;
3792 	info->last = info->next = 0;
3793 }
3794 
3795 static inline void hw_resume_rx(struct ksz_hw *hw)
3796 {
3797 	writel(DMA_START, hw->io + KS_DMA_RX_START);
3798 }
3799 
3800 /**
3801  * hw_start_rx - start receiving
3802  * @hw: 	The hardware instance.
3803  *
3804  * This routine starts the receive function of the hardware.
3805  */
3806 static void hw_start_rx(struct ksz_hw *hw)
3807 {
3808 	writel(hw->rx_cfg, hw->io + KS_DMA_RX_CTRL);
3809 
3810 	/* Notify when the receive stops. */
3811 	hw->intr_mask |= KS884X_INT_RX_STOPPED;
3812 
3813 	writel(DMA_START, hw->io + KS_DMA_RX_START);
3814 	hw_ack_intr(hw, KS884X_INT_RX_STOPPED);
3815 	hw->rx_stop++;
3816 
3817 	/* Variable overflows. */
3818 	if (0 == hw->rx_stop)
3819 		hw->rx_stop = 2;
3820 }
3821 
3822 /**
3823  * hw_stop_rx - stop receiving
3824  * @hw: 	The hardware instance.
3825  *
3826  * This routine stops the receive function of the hardware.
3827  */
3828 static void hw_stop_rx(struct ksz_hw *hw)
3829 {
3830 	hw->rx_stop = 0;
3831 	hw_turn_off_intr(hw, KS884X_INT_RX_STOPPED);
3832 	writel((hw->rx_cfg & ~DMA_RX_ENABLE), hw->io + KS_DMA_RX_CTRL);
3833 }
3834 
3835 /**
3836  * hw_start_tx - start transmitting
3837  * @hw: 	The hardware instance.
3838  *
3839  * This routine starts the transmit function of the hardware.
3840  */
3841 static void hw_start_tx(struct ksz_hw *hw)
3842 {
3843 	writel(hw->tx_cfg, hw->io + KS_DMA_TX_CTRL);
3844 }
3845 
3846 /**
3847  * hw_stop_tx - stop transmitting
3848  * @hw: 	The hardware instance.
3849  *
3850  * This routine stops the transmit function of the hardware.
3851  */
3852 static void hw_stop_tx(struct ksz_hw *hw)
3853 {
3854 	writel((hw->tx_cfg & ~DMA_TX_ENABLE), hw->io + KS_DMA_TX_CTRL);
3855 }
3856 
3857 /**
3858  * hw_disable - disable hardware
3859  * @hw: 	The hardware instance.
3860  *
3861  * This routine disables the hardware.
3862  */
3863 static void hw_disable(struct ksz_hw *hw)
3864 {
3865 	hw_stop_rx(hw);
3866 	hw_stop_tx(hw);
3867 	hw->enabled = 0;
3868 }
3869 
3870 /**
3871  * hw_enable - enable hardware
3872  * @hw: 	The hardware instance.
3873  *
3874  * This routine enables the hardware.
3875  */
3876 static void hw_enable(struct ksz_hw *hw)
3877 {
3878 	hw_start_tx(hw);
3879 	hw_start_rx(hw);
3880 	hw->enabled = 1;
3881 }
3882 
3883 /**
3884  * hw_alloc_pkt - allocate enough descriptors for transmission
3885  * @hw: 	The hardware instance.
3886  * @length:	The length of the packet.
3887  * @physical:	Number of descriptors required.
3888  *
3889  * This function allocates descriptors for transmission.
3890  *
3891  * Return 0 if not successful; 1 for buffer copy; or number of descriptors.
3892  */
3893 static int hw_alloc_pkt(struct ksz_hw *hw, int length, int physical)
3894 {
3895 	/* Always leave one descriptor free. */
3896 	if (hw->tx_desc_info.avail <= 1)
3897 		return 0;
3898 
3899 	/* Allocate a descriptor for transmission and mark it current. */
3900 	get_tx_pkt(&hw->tx_desc_info, &hw->tx_desc_info.cur);
3901 	hw->tx_desc_info.cur->sw.buf.tx.first_seg = 1;
3902 
3903 	/* Keep track of number of transmit descriptors used so far. */
3904 	++hw->tx_int_cnt;
3905 	hw->tx_size += length;
3906 
3907 	/* Cannot hold on too much data. */
3908 	if (hw->tx_size >= MAX_TX_HELD_SIZE)
3909 		hw->tx_int_cnt = hw->tx_int_mask + 1;
3910 
3911 	if (physical > hw->tx_desc_info.avail)
3912 		return 1;
3913 
3914 	return hw->tx_desc_info.avail;
3915 }
3916 
3917 /**
3918  * hw_send_pkt - mark packet for transmission
3919  * @hw: 	The hardware instance.
3920  *
3921  * This routine marks the packet for transmission in PCI version.
3922  */
3923 static void hw_send_pkt(struct ksz_hw *hw)
3924 {
3925 	struct ksz_desc *cur = hw->tx_desc_info.cur;
3926 
3927 	cur->sw.buf.tx.last_seg = 1;
3928 
3929 	/* Interrupt only after specified number of descriptors used. */
3930 	if (hw->tx_int_cnt > hw->tx_int_mask) {
3931 		cur->sw.buf.tx.intr = 1;
3932 		hw->tx_int_cnt = 0;
3933 		hw->tx_size = 0;
3934 	}
3935 
3936 	/* KSZ8842 supports port directed transmission. */
3937 	cur->sw.buf.tx.dest_port = hw->dst_ports;
3938 
3939 	release_desc(cur);
3940 
3941 	writel(0, hw->io + KS_DMA_TX_START);
3942 }
3943 
3944 static int empty_addr(u8 *addr)
3945 {
3946 	u32 *addr1 = (u32 *) addr;
3947 	u16 *addr2 = (u16 *) &addr[4];
3948 
3949 	return 0 == *addr1 && 0 == *addr2;
3950 }
3951 
3952 /**
3953  * hw_set_addr - set MAC address
3954  * @hw: 	The hardware instance.
3955  *
3956  * This routine programs the MAC address of the hardware when the address is
3957  * overridden.
3958  */
3959 static void hw_set_addr(struct ksz_hw *hw)
3960 {
3961 	int i;
3962 
3963 	for (i = 0; i < ETH_ALEN; i++)
3964 		writeb(hw->override_addr[MAC_ADDR_ORDER(i)],
3965 			hw->io + KS884X_ADDR_0_OFFSET + i);
3966 
3967 	sw_set_addr(hw, hw->override_addr);
3968 }
3969 
3970 /**
3971  * hw_read_addr - read MAC address
3972  * @hw: 	The hardware instance.
3973  *
3974  * This routine retrieves the MAC address of the hardware.
3975  */
3976 static void hw_read_addr(struct ksz_hw *hw)
3977 {
3978 	int i;
3979 
3980 	for (i = 0; i < ETH_ALEN; i++)
3981 		hw->perm_addr[MAC_ADDR_ORDER(i)] = readb(hw->io +
3982 			KS884X_ADDR_0_OFFSET + i);
3983 
3984 	if (!hw->mac_override) {
3985 		memcpy(hw->override_addr, hw->perm_addr, ETH_ALEN);
3986 		if (empty_addr(hw->override_addr)) {
3987 			memcpy(hw->perm_addr, DEFAULT_MAC_ADDRESS, ETH_ALEN);
3988 			memcpy(hw->override_addr, DEFAULT_MAC_ADDRESS,
3989 			       ETH_ALEN);
3990 			hw->override_addr[5] += hw->id;
3991 			hw_set_addr(hw);
3992 		}
3993 	}
3994 }
3995 
3996 static void hw_ena_add_addr(struct ksz_hw *hw, int index, u8 *mac_addr)
3997 {
3998 	int i;
3999 	u32 mac_addr_lo;
4000 	u32 mac_addr_hi;
4001 
4002 	mac_addr_hi = 0;
4003 	for (i = 0; i < 2; i++) {
4004 		mac_addr_hi <<= 8;
4005 		mac_addr_hi |= mac_addr[i];
4006 	}
4007 	mac_addr_hi |= ADD_ADDR_ENABLE;
4008 	mac_addr_lo = 0;
4009 	for (i = 2; i < 6; i++) {
4010 		mac_addr_lo <<= 8;
4011 		mac_addr_lo |= mac_addr[i];
4012 	}
4013 	index *= ADD_ADDR_INCR;
4014 
4015 	writel(mac_addr_lo, hw->io + index + KS_ADD_ADDR_0_LO);
4016 	writel(mac_addr_hi, hw->io + index + KS_ADD_ADDR_0_HI);
4017 }
4018 
4019 static void hw_set_add_addr(struct ksz_hw *hw)
4020 {
4021 	int i;
4022 
4023 	for (i = 0; i < ADDITIONAL_ENTRIES; i++) {
4024 		if (empty_addr(hw->address[i]))
4025 			writel(0, hw->io + ADD_ADDR_INCR * i +
4026 				KS_ADD_ADDR_0_HI);
4027 		else
4028 			hw_ena_add_addr(hw, i, hw->address[i]);
4029 	}
4030 }
4031 
4032 static int hw_add_addr(struct ksz_hw *hw, const u8 *mac_addr)
4033 {
4034 	int i;
4035 	int j = ADDITIONAL_ENTRIES;
4036 
4037 	if (ether_addr_equal(hw->override_addr, mac_addr))
4038 		return 0;
4039 	for (i = 0; i < hw->addr_list_size; i++) {
4040 		if (ether_addr_equal(hw->address[i], mac_addr))
4041 			return 0;
4042 		if (ADDITIONAL_ENTRIES == j && empty_addr(hw->address[i]))
4043 			j = i;
4044 	}
4045 	if (j < ADDITIONAL_ENTRIES) {
4046 		memcpy(hw->address[j], mac_addr, ETH_ALEN);
4047 		hw_ena_add_addr(hw, j, hw->address[j]);
4048 		return 0;
4049 	}
4050 	return -1;
4051 }
4052 
4053 static int hw_del_addr(struct ksz_hw *hw, const u8 *mac_addr)
4054 {
4055 	int i;
4056 
4057 	for (i = 0; i < hw->addr_list_size; i++) {
4058 		if (ether_addr_equal(hw->address[i], mac_addr)) {
4059 			eth_zero_addr(hw->address[i]);
4060 			writel(0, hw->io + ADD_ADDR_INCR * i +
4061 				KS_ADD_ADDR_0_HI);
4062 			return 0;
4063 		}
4064 	}
4065 	return -1;
4066 }
4067 
4068 /**
4069  * hw_clr_multicast - clear multicast addresses
4070  * @hw: 	The hardware instance.
4071  *
4072  * This routine removes all multicast addresses set in the hardware.
4073  */
4074 static void hw_clr_multicast(struct ksz_hw *hw)
4075 {
4076 	int i;
4077 
4078 	for (i = 0; i < HW_MULTICAST_SIZE; i++) {
4079 		hw->multi_bits[i] = 0;
4080 
4081 		writeb(0, hw->io + KS884X_MULTICAST_0_OFFSET + i);
4082 	}
4083 }
4084 
4085 /**
4086  * hw_set_grp_addr - set multicast addresses
4087  * @hw: 	The hardware instance.
4088  *
4089  * This routine programs multicast addresses for the hardware to accept those
4090  * addresses.
4091  */
4092 static void hw_set_grp_addr(struct ksz_hw *hw)
4093 {
4094 	int i;
4095 	int index;
4096 	int position;
4097 	int value;
4098 
4099 	memset(hw->multi_bits, 0, sizeof(u8) * HW_MULTICAST_SIZE);
4100 
4101 	for (i = 0; i < hw->multi_list_size; i++) {
4102 		position = (ether_crc(6, hw->multi_list[i]) >> 26) & 0x3f;
4103 		index = position >> 3;
4104 		value = 1 << (position & 7);
4105 		hw->multi_bits[index] |= (u8) value;
4106 	}
4107 
4108 	for (i = 0; i < HW_MULTICAST_SIZE; i++)
4109 		writeb(hw->multi_bits[i], hw->io + KS884X_MULTICAST_0_OFFSET +
4110 			i);
4111 }
4112 
4113 /**
4114  * hw_set_multicast - enable or disable all multicast receiving
4115  * @hw: 	The hardware instance.
4116  * @multicast:	To turn on or off the all multicast feature.
4117  *
4118  * This routine enables/disables the hardware to accept all multicast packets.
4119  */
4120 static void hw_set_multicast(struct ksz_hw *hw, u8 multicast)
4121 {
4122 	/* Stop receiving for reconfiguration. */
4123 	hw_stop_rx(hw);
4124 
4125 	if (multicast)
4126 		hw->rx_cfg |= DMA_RX_ALL_MULTICAST;
4127 	else
4128 		hw->rx_cfg &= ~DMA_RX_ALL_MULTICAST;
4129 
4130 	if (hw->enabled)
4131 		hw_start_rx(hw);
4132 }
4133 
4134 /**
4135  * hw_set_promiscuous - enable or disable promiscuous receiving
4136  * @hw: 	The hardware instance.
4137  * @prom:	To turn on or off the promiscuous feature.
4138  *
4139  * This routine enables/disables the hardware to accept all packets.
4140  */
4141 static void hw_set_promiscuous(struct ksz_hw *hw, u8 prom)
4142 {
4143 	/* Stop receiving for reconfiguration. */
4144 	hw_stop_rx(hw);
4145 
4146 	if (prom)
4147 		hw->rx_cfg |= DMA_RX_PROMISCUOUS;
4148 	else
4149 		hw->rx_cfg &= ~DMA_RX_PROMISCUOUS;
4150 
4151 	if (hw->enabled)
4152 		hw_start_rx(hw);
4153 }
4154 
4155 /**
4156  * sw_enable - enable the switch
4157  * @hw: 	The hardware instance.
4158  * @enable:	The flag to enable or disable the switch
4159  *
4160  * This routine is used to enable/disable the switch in KSZ8842.
4161  */
4162 static void sw_enable(struct ksz_hw *hw, int enable)
4163 {
4164 	int port;
4165 
4166 	for (port = 0; port < SWITCH_PORT_NUM; port++) {
4167 		if (hw->dev_count > 1) {
4168 			/* Set port-base vlan membership with host port. */
4169 			sw_cfg_port_base_vlan(hw, port,
4170 				HOST_MASK | (1 << port));
4171 			port_set_stp_state(hw, port, STP_STATE_DISABLED);
4172 		} else {
4173 			sw_cfg_port_base_vlan(hw, port, PORT_MASK);
4174 			port_set_stp_state(hw, port, STP_STATE_FORWARDING);
4175 		}
4176 	}
4177 	if (hw->dev_count > 1)
4178 		port_set_stp_state(hw, SWITCH_PORT_NUM, STP_STATE_SIMPLE);
4179 	else
4180 		port_set_stp_state(hw, SWITCH_PORT_NUM, STP_STATE_FORWARDING);
4181 
4182 	if (enable)
4183 		enable = KS8842_START;
4184 	writew(enable, hw->io + KS884X_CHIP_ID_OFFSET);
4185 }
4186 
4187 /**
4188  * sw_setup - setup the switch
4189  * @hw: 	The hardware instance.
4190  *
4191  * This routine setup the hardware switch engine for default operation.
4192  */
4193 static void sw_setup(struct ksz_hw *hw)
4194 {
4195 	int port;
4196 
4197 	sw_set_global_ctrl(hw);
4198 
4199 	/* Enable switch broadcast storm protection at 10% percent rate. */
4200 	sw_init_broad_storm(hw);
4201 	hw_cfg_broad_storm(hw, BROADCAST_STORM_PROTECTION_RATE);
4202 	for (port = 0; port < SWITCH_PORT_NUM; port++)
4203 		sw_ena_broad_storm(hw, port);
4204 
4205 	sw_init_prio(hw);
4206 
4207 	sw_init_mirror(hw);
4208 
4209 	sw_init_prio_rate(hw);
4210 
4211 	sw_init_vlan(hw);
4212 
4213 	if (hw->features & STP_SUPPORT)
4214 		sw_init_stp(hw);
4215 	if (!sw_chk(hw, KS8842_SWITCH_CTRL_1_OFFSET,
4216 			SWITCH_TX_FLOW_CTRL | SWITCH_RX_FLOW_CTRL))
4217 		hw->overrides |= PAUSE_FLOW_CTRL;
4218 	sw_enable(hw, 1);
4219 }
4220 
4221 /**
4222  * ksz_start_timer - start kernel timer
4223  * @info:	Kernel timer information.
4224  * @time:	The time tick.
4225  *
4226  * This routine starts the kernel timer after the specified time tick.
4227  */
4228 static void ksz_start_timer(struct ksz_timer_info *info, int time)
4229 {
4230 	info->cnt = 0;
4231 	info->timer.expires = jiffies + time;
4232 	add_timer(&info->timer);
4233 
4234 	/* infinity */
4235 	info->max = -1;
4236 }
4237 
4238 /**
4239  * ksz_stop_timer - stop kernel timer
4240  * @info:	Kernel timer information.
4241  *
4242  * This routine stops the kernel timer.
4243  */
4244 static void ksz_stop_timer(struct ksz_timer_info *info)
4245 {
4246 	if (info->max) {
4247 		info->max = 0;
4248 		del_timer_sync(&info->timer);
4249 	}
4250 }
4251 
4252 static void ksz_init_timer(struct ksz_timer_info *info, int period,
4253 	void (*function)(struct timer_list *))
4254 {
4255 	info->max = 0;
4256 	info->period = period;
4257 	timer_setup(&info->timer, function, 0);
4258 }
4259 
4260 static void ksz_update_timer(struct ksz_timer_info *info)
4261 {
4262 	++info->cnt;
4263 	if (info->max > 0) {
4264 		if (info->cnt < info->max) {
4265 			info->timer.expires = jiffies + info->period;
4266 			add_timer(&info->timer);
4267 		} else
4268 			info->max = 0;
4269 	} else if (info->max < 0) {
4270 		info->timer.expires = jiffies + info->period;
4271 		add_timer(&info->timer);
4272 	}
4273 }
4274 
4275 /**
4276  * ksz_alloc_soft_desc - allocate software descriptors
4277  * @desc_info:	Descriptor information structure.
4278  * @transmit:	Indication that descriptors are for transmit.
4279  *
4280  * This local function allocates software descriptors for manipulation in
4281  * memory.
4282  *
4283  * Return 0 if successful.
4284  */
4285 static int ksz_alloc_soft_desc(struct ksz_desc_info *desc_info, int transmit)
4286 {
4287 	desc_info->ring = kcalloc(desc_info->alloc, sizeof(struct ksz_desc),
4288 				  GFP_KERNEL);
4289 	if (!desc_info->ring)
4290 		return 1;
4291 	hw_init_desc(desc_info, transmit);
4292 	return 0;
4293 }
4294 
4295 /**
4296  * ksz_alloc_desc - allocate hardware descriptors
4297  * @adapter:	Adapter information structure.
4298  *
4299  * This local function allocates hardware descriptors for receiving and
4300  * transmitting.
4301  *
4302  * Return 0 if successful.
4303  */
4304 static int ksz_alloc_desc(struct dev_info *adapter)
4305 {
4306 	struct ksz_hw *hw = &adapter->hw;
4307 	int offset;
4308 
4309 	/* Allocate memory for RX & TX descriptors. */
4310 	adapter->desc_pool.alloc_size =
4311 		hw->rx_desc_info.size * hw->rx_desc_info.alloc +
4312 		hw->tx_desc_info.size * hw->tx_desc_info.alloc +
4313 		DESC_ALIGNMENT;
4314 
4315 	adapter->desc_pool.alloc_virt =
4316 		dma_alloc_coherent(&adapter->pdev->dev,
4317 				   adapter->desc_pool.alloc_size,
4318 				   &adapter->desc_pool.dma_addr, GFP_KERNEL);
4319 	if (adapter->desc_pool.alloc_virt == NULL) {
4320 		adapter->desc_pool.alloc_size = 0;
4321 		return 1;
4322 	}
4323 
4324 	/* Align to the next cache line boundary. */
4325 	offset = (((ulong) adapter->desc_pool.alloc_virt % DESC_ALIGNMENT) ?
4326 		(DESC_ALIGNMENT -
4327 		((ulong) adapter->desc_pool.alloc_virt % DESC_ALIGNMENT)) : 0);
4328 	adapter->desc_pool.virt = adapter->desc_pool.alloc_virt + offset;
4329 	adapter->desc_pool.phys = adapter->desc_pool.dma_addr + offset;
4330 
4331 	/* Allocate receive/transmit descriptors. */
4332 	hw->rx_desc_info.ring_virt = (struct ksz_hw_desc *)
4333 		adapter->desc_pool.virt;
4334 	hw->rx_desc_info.ring_phys = adapter->desc_pool.phys;
4335 	offset = hw->rx_desc_info.alloc * hw->rx_desc_info.size;
4336 	hw->tx_desc_info.ring_virt = (struct ksz_hw_desc *)
4337 		(adapter->desc_pool.virt + offset);
4338 	hw->tx_desc_info.ring_phys = adapter->desc_pool.phys + offset;
4339 
4340 	if (ksz_alloc_soft_desc(&hw->rx_desc_info, 0))
4341 		return 1;
4342 	if (ksz_alloc_soft_desc(&hw->tx_desc_info, 1))
4343 		return 1;
4344 
4345 	return 0;
4346 }
4347 
4348 /**
4349  * free_dma_buf - release DMA buffer resources
4350  * @adapter:	Adapter information structure.
4351  * @dma_buf:	pointer to buf
4352  * @direction:	to or from device
4353  *
4354  * This routine is just a helper function to release the DMA buffer resources.
4355  */
4356 static void free_dma_buf(struct dev_info *adapter, struct ksz_dma_buf *dma_buf,
4357 	int direction)
4358 {
4359 	dma_unmap_single(&adapter->pdev->dev, dma_buf->dma, dma_buf->len,
4360 			 direction);
4361 	dev_kfree_skb(dma_buf->skb);
4362 	dma_buf->skb = NULL;
4363 	dma_buf->dma = 0;
4364 }
4365 
4366 /**
4367  * ksz_init_rx_buffers - initialize receive descriptors
4368  * @adapter:	Adapter information structure.
4369  *
4370  * This routine initializes DMA buffers for receiving.
4371  */
4372 static void ksz_init_rx_buffers(struct dev_info *adapter)
4373 {
4374 	int i;
4375 	struct ksz_desc *desc;
4376 	struct ksz_dma_buf *dma_buf;
4377 	struct ksz_hw *hw = &adapter->hw;
4378 	struct ksz_desc_info *info = &hw->rx_desc_info;
4379 
4380 	for (i = 0; i < hw->rx_desc_info.alloc; i++) {
4381 		get_rx_pkt(info, &desc);
4382 
4383 		dma_buf = DMA_BUFFER(desc);
4384 		if (dma_buf->skb && dma_buf->len != adapter->mtu)
4385 			free_dma_buf(adapter, dma_buf, DMA_FROM_DEVICE);
4386 		dma_buf->len = adapter->mtu;
4387 		if (!dma_buf->skb)
4388 			dma_buf->skb = alloc_skb(dma_buf->len, GFP_ATOMIC);
4389 		if (dma_buf->skb && !dma_buf->dma)
4390 			dma_buf->dma = dma_map_single(&adapter->pdev->dev,
4391 						skb_tail_pointer(dma_buf->skb),
4392 						dma_buf->len,
4393 						DMA_FROM_DEVICE);
4394 
4395 		/* Set descriptor. */
4396 		set_rx_buf(desc, dma_buf->dma);
4397 		set_rx_len(desc, dma_buf->len);
4398 		release_desc(desc);
4399 	}
4400 }
4401 
4402 /**
4403  * ksz_alloc_mem - allocate memory for hardware descriptors
4404  * @adapter:	Adapter information structure.
4405  *
4406  * This function allocates memory for use by hardware descriptors for receiving
4407  * and transmitting.
4408  *
4409  * Return 0 if successful.
4410  */
4411 static int ksz_alloc_mem(struct dev_info *adapter)
4412 {
4413 	struct ksz_hw *hw = &adapter->hw;
4414 
4415 	/* Determine the number of receive and transmit descriptors. */
4416 	hw->rx_desc_info.alloc = NUM_OF_RX_DESC;
4417 	hw->tx_desc_info.alloc = NUM_OF_TX_DESC;
4418 
4419 	/* Determine how many descriptors to skip transmit interrupt. */
4420 	hw->tx_int_cnt = 0;
4421 	hw->tx_int_mask = NUM_OF_TX_DESC / 4;
4422 	if (hw->tx_int_mask > 8)
4423 		hw->tx_int_mask = 8;
4424 	while (hw->tx_int_mask) {
4425 		hw->tx_int_cnt++;
4426 		hw->tx_int_mask >>= 1;
4427 	}
4428 	if (hw->tx_int_cnt) {
4429 		hw->tx_int_mask = (1 << (hw->tx_int_cnt - 1)) - 1;
4430 		hw->tx_int_cnt = 0;
4431 	}
4432 
4433 	/* Determine the descriptor size. */
4434 	hw->rx_desc_info.size =
4435 		(((sizeof(struct ksz_hw_desc) + DESC_ALIGNMENT - 1) /
4436 		DESC_ALIGNMENT) * DESC_ALIGNMENT);
4437 	hw->tx_desc_info.size =
4438 		(((sizeof(struct ksz_hw_desc) + DESC_ALIGNMENT - 1) /
4439 		DESC_ALIGNMENT) * DESC_ALIGNMENT);
4440 	if (hw->rx_desc_info.size != sizeof(struct ksz_hw_desc))
4441 		pr_alert("Hardware descriptor size not right!\n");
4442 	ksz_check_desc_num(&hw->rx_desc_info);
4443 	ksz_check_desc_num(&hw->tx_desc_info);
4444 
4445 	/* Allocate descriptors. */
4446 	if (ksz_alloc_desc(adapter))
4447 		return 1;
4448 
4449 	return 0;
4450 }
4451 
4452 /**
4453  * ksz_free_desc - free software and hardware descriptors
4454  * @adapter:	Adapter information structure.
4455  *
4456  * This local routine frees the software and hardware descriptors allocated by
4457  * ksz_alloc_desc().
4458  */
4459 static void ksz_free_desc(struct dev_info *adapter)
4460 {
4461 	struct ksz_hw *hw = &adapter->hw;
4462 
4463 	/* Reset descriptor. */
4464 	hw->rx_desc_info.ring_virt = NULL;
4465 	hw->tx_desc_info.ring_virt = NULL;
4466 	hw->rx_desc_info.ring_phys = 0;
4467 	hw->tx_desc_info.ring_phys = 0;
4468 
4469 	/* Free memory. */
4470 	if (adapter->desc_pool.alloc_virt)
4471 		dma_free_coherent(&adapter->pdev->dev,
4472 				  adapter->desc_pool.alloc_size,
4473 				  adapter->desc_pool.alloc_virt,
4474 				  adapter->desc_pool.dma_addr);
4475 
4476 	/* Reset resource pool. */
4477 	adapter->desc_pool.alloc_size = 0;
4478 	adapter->desc_pool.alloc_virt = NULL;
4479 
4480 	kfree(hw->rx_desc_info.ring);
4481 	hw->rx_desc_info.ring = NULL;
4482 	kfree(hw->tx_desc_info.ring);
4483 	hw->tx_desc_info.ring = NULL;
4484 }
4485 
4486 /**
4487  * ksz_free_buffers - free buffers used in the descriptors
4488  * @adapter:	Adapter information structure.
4489  * @desc_info:	Descriptor information structure.
4490  * @direction:	to or from device
4491  *
4492  * This local routine frees buffers used in the DMA buffers.
4493  */
4494 static void ksz_free_buffers(struct dev_info *adapter,
4495 	struct ksz_desc_info *desc_info, int direction)
4496 {
4497 	int i;
4498 	struct ksz_dma_buf *dma_buf;
4499 	struct ksz_desc *desc = desc_info->ring;
4500 
4501 	for (i = 0; i < desc_info->alloc; i++) {
4502 		dma_buf = DMA_BUFFER(desc);
4503 		if (dma_buf->skb)
4504 			free_dma_buf(adapter, dma_buf, direction);
4505 		desc++;
4506 	}
4507 }
4508 
4509 /**
4510  * ksz_free_mem - free all resources used by descriptors
4511  * @adapter:	Adapter information structure.
4512  *
4513  * This local routine frees all the resources allocated by ksz_alloc_mem().
4514  */
4515 static void ksz_free_mem(struct dev_info *adapter)
4516 {
4517 	/* Free transmit buffers. */
4518 	ksz_free_buffers(adapter, &adapter->hw.tx_desc_info, DMA_TO_DEVICE);
4519 
4520 	/* Free receive buffers. */
4521 	ksz_free_buffers(adapter, &adapter->hw.rx_desc_info, DMA_FROM_DEVICE);
4522 
4523 	/* Free descriptors. */
4524 	ksz_free_desc(adapter);
4525 }
4526 
4527 static void get_mib_counters(struct ksz_hw *hw, int first, int cnt,
4528 	u64 *counter)
4529 {
4530 	int i;
4531 	int mib;
4532 	int port;
4533 	struct ksz_port_mib *port_mib;
4534 
4535 	memset(counter, 0, sizeof(u64) * TOTAL_PORT_COUNTER_NUM);
4536 	for (i = 0, port = first; i < cnt; i++, port++) {
4537 		port_mib = &hw->port_mib[port];
4538 		for (mib = port_mib->mib_start; mib < hw->mib_cnt; mib++)
4539 			counter[mib] += port_mib->counter[mib];
4540 	}
4541 }
4542 
4543 /**
4544  * send_packet - send packet
4545  * @skb:	Socket buffer.
4546  * @dev:	Network device.
4547  *
4548  * This routine is used to send a packet out to the network.
4549  */
4550 static void send_packet(struct sk_buff *skb, struct net_device *dev)
4551 {
4552 	struct ksz_desc *desc;
4553 	struct ksz_desc *first;
4554 	struct dev_priv *priv = netdev_priv(dev);
4555 	struct dev_info *hw_priv = priv->adapter;
4556 	struct ksz_hw *hw = &hw_priv->hw;
4557 	struct ksz_desc_info *info = &hw->tx_desc_info;
4558 	struct ksz_dma_buf *dma_buf;
4559 	int len;
4560 	int last_frag = skb_shinfo(skb)->nr_frags;
4561 
4562 	/*
4563 	 * KSZ8842 with multiple device interfaces needs to be told which port
4564 	 * to send.
4565 	 */
4566 	if (hw->dev_count > 1)
4567 		hw->dst_ports = 1 << priv->port.first_port;
4568 
4569 	/* Hardware will pad the length to 60. */
4570 	len = skb->len;
4571 
4572 	/* Remember the very first descriptor. */
4573 	first = info->cur;
4574 	desc = first;
4575 
4576 	dma_buf = DMA_BUFFER(desc);
4577 	if (last_frag) {
4578 		int frag;
4579 		skb_frag_t *this_frag;
4580 
4581 		dma_buf->len = skb_headlen(skb);
4582 
4583 		dma_buf->dma = dma_map_single(&hw_priv->pdev->dev, skb->data,
4584 					      dma_buf->len, DMA_TO_DEVICE);
4585 		set_tx_buf(desc, dma_buf->dma);
4586 		set_tx_len(desc, dma_buf->len);
4587 
4588 		frag = 0;
4589 		do {
4590 			this_frag = &skb_shinfo(skb)->frags[frag];
4591 
4592 			/* Get a new descriptor. */
4593 			get_tx_pkt(info, &desc);
4594 
4595 			/* Keep track of descriptors used so far. */
4596 			++hw->tx_int_cnt;
4597 
4598 			dma_buf = DMA_BUFFER(desc);
4599 			dma_buf->len = skb_frag_size(this_frag);
4600 
4601 			dma_buf->dma = dma_map_single(&hw_priv->pdev->dev,
4602 						      skb_frag_address(this_frag),
4603 						      dma_buf->len,
4604 						      DMA_TO_DEVICE);
4605 			set_tx_buf(desc, dma_buf->dma);
4606 			set_tx_len(desc, dma_buf->len);
4607 
4608 			frag++;
4609 			if (frag == last_frag)
4610 				break;
4611 
4612 			/* Do not release the last descriptor here. */
4613 			release_desc(desc);
4614 		} while (1);
4615 
4616 		/* current points to the last descriptor. */
4617 		info->cur = desc;
4618 
4619 		/* Release the first descriptor. */
4620 		release_desc(first);
4621 	} else {
4622 		dma_buf->len = len;
4623 
4624 		dma_buf->dma = dma_map_single(&hw_priv->pdev->dev, skb->data,
4625 					      dma_buf->len, DMA_TO_DEVICE);
4626 		set_tx_buf(desc, dma_buf->dma);
4627 		set_tx_len(desc, dma_buf->len);
4628 	}
4629 
4630 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
4631 		(desc)->sw.buf.tx.csum_gen_tcp = 1;
4632 		(desc)->sw.buf.tx.csum_gen_udp = 1;
4633 	}
4634 
4635 	/*
4636 	 * The last descriptor holds the packet so that it can be returned to
4637 	 * network subsystem after all descriptors are transmitted.
4638 	 */
4639 	dma_buf->skb = skb;
4640 
4641 	hw_send_pkt(hw);
4642 
4643 	/* Update transmit statistics. */
4644 	dev->stats.tx_packets++;
4645 	dev->stats.tx_bytes += len;
4646 }
4647 
4648 /**
4649  * transmit_cleanup - clean up transmit descriptors
4650  * @hw_priv:	Network device.
4651  * @normal:	break if owned
4652  *
4653  * This routine is called to clean up the transmitted buffers.
4654  */
4655 static void transmit_cleanup(struct dev_info *hw_priv, int normal)
4656 {
4657 	int last;
4658 	union desc_stat status;
4659 	struct ksz_hw *hw = &hw_priv->hw;
4660 	struct ksz_desc_info *info = &hw->tx_desc_info;
4661 	struct ksz_desc *desc;
4662 	struct ksz_dma_buf *dma_buf;
4663 	struct net_device *dev = NULL;
4664 
4665 	spin_lock_irq(&hw_priv->hwlock);
4666 	last = info->last;
4667 
4668 	while (info->avail < info->alloc) {
4669 		/* Get next descriptor which is not hardware owned. */
4670 		desc = &info->ring[last];
4671 		status.data = le32_to_cpu(desc->phw->ctrl.data);
4672 		if (status.tx.hw_owned) {
4673 			if (normal)
4674 				break;
4675 			else
4676 				reset_desc(desc, status);
4677 		}
4678 
4679 		dma_buf = DMA_BUFFER(desc);
4680 		dma_unmap_single(&hw_priv->pdev->dev, dma_buf->dma,
4681 				 dma_buf->len, DMA_TO_DEVICE);
4682 
4683 		/* This descriptor contains the last buffer in the packet. */
4684 		if (dma_buf->skb) {
4685 			dev = dma_buf->skb->dev;
4686 
4687 			/* Release the packet back to network subsystem. */
4688 			dev_kfree_skb_irq(dma_buf->skb);
4689 			dma_buf->skb = NULL;
4690 		}
4691 
4692 		/* Free the transmitted descriptor. */
4693 		last++;
4694 		last &= info->mask;
4695 		info->avail++;
4696 	}
4697 	info->last = last;
4698 	spin_unlock_irq(&hw_priv->hwlock);
4699 
4700 	/* Notify the network subsystem that the packet has been sent. */
4701 	if (dev)
4702 		netif_trans_update(dev);
4703 }
4704 
4705 /**
4706  * tx_done - transmit done processing
4707  * @hw_priv:	Network device.
4708  *
4709  * This routine is called when the transmit interrupt is triggered, indicating
4710  * either a packet is sent successfully or there are transmit errors.
4711  */
4712 static void tx_done(struct dev_info *hw_priv)
4713 {
4714 	struct ksz_hw *hw = &hw_priv->hw;
4715 	int port;
4716 
4717 	transmit_cleanup(hw_priv, 1);
4718 
4719 	for (port = 0; port < hw->dev_count; port++) {
4720 		struct net_device *dev = hw->port_info[port].pdev;
4721 
4722 		if (netif_running(dev) && netif_queue_stopped(dev))
4723 			netif_wake_queue(dev);
4724 	}
4725 }
4726 
4727 static inline void copy_old_skb(struct sk_buff *old, struct sk_buff *skb)
4728 {
4729 	skb->dev = old->dev;
4730 	skb->protocol = old->protocol;
4731 	skb->ip_summed = old->ip_summed;
4732 	skb->csum = old->csum;
4733 	skb_set_network_header(skb, ETH_HLEN);
4734 
4735 	dev_consume_skb_any(old);
4736 }
4737 
4738 /**
4739  * netdev_tx - send out packet
4740  * @skb:	Socket buffer.
4741  * @dev:	Network device.
4742  *
4743  * This function is used by the upper network layer to send out a packet.
4744  *
4745  * Return 0 if successful; otherwise an error code indicating failure.
4746  */
4747 static netdev_tx_t netdev_tx(struct sk_buff *skb, struct net_device *dev)
4748 {
4749 	struct dev_priv *priv = netdev_priv(dev);
4750 	struct dev_info *hw_priv = priv->adapter;
4751 	struct ksz_hw *hw = &hw_priv->hw;
4752 	int left;
4753 	int num = 1;
4754 	int rc = 0;
4755 
4756 	if (hw->features & SMALL_PACKET_TX_BUG) {
4757 		struct sk_buff *org_skb = skb;
4758 
4759 		if (skb->len <= 48) {
4760 			if (skb_end_pointer(skb) - skb->data >= 50) {
4761 				memset(&skb->data[skb->len], 0, 50 - skb->len);
4762 				skb->len = 50;
4763 			} else {
4764 				skb = netdev_alloc_skb(dev, 50);
4765 				if (!skb)
4766 					return NETDEV_TX_BUSY;
4767 				memcpy(skb->data, org_skb->data, org_skb->len);
4768 				memset(&skb->data[org_skb->len], 0,
4769 					50 - org_skb->len);
4770 				skb->len = 50;
4771 				copy_old_skb(org_skb, skb);
4772 			}
4773 		}
4774 	}
4775 
4776 	spin_lock_irq(&hw_priv->hwlock);
4777 
4778 	num = skb_shinfo(skb)->nr_frags + 1;
4779 	left = hw_alloc_pkt(hw, skb->len, num);
4780 	if (left) {
4781 		if (left < num ||
4782 		    (CHECKSUM_PARTIAL == skb->ip_summed &&
4783 		     skb->protocol == htons(ETH_P_IPV6))) {
4784 			struct sk_buff *org_skb = skb;
4785 
4786 			skb = netdev_alloc_skb(dev, org_skb->len);
4787 			if (!skb) {
4788 				rc = NETDEV_TX_BUSY;
4789 				goto unlock;
4790 			}
4791 			skb_copy_and_csum_dev(org_skb, skb->data);
4792 			org_skb->ip_summed = CHECKSUM_NONE;
4793 			skb->len = org_skb->len;
4794 			copy_old_skb(org_skb, skb);
4795 		}
4796 		send_packet(skb, dev);
4797 		if (left <= num)
4798 			netif_stop_queue(dev);
4799 	} else {
4800 		/* Stop the transmit queue until packet is allocated. */
4801 		netif_stop_queue(dev);
4802 		rc = NETDEV_TX_BUSY;
4803 	}
4804 unlock:
4805 	spin_unlock_irq(&hw_priv->hwlock);
4806 
4807 	return rc;
4808 }
4809 
4810 /**
4811  * netdev_tx_timeout - transmit timeout processing
4812  * @dev:	Network device.
4813  * @txqueue:	index of hanging queue
4814  *
4815  * This routine is called when the transmit timer expires.  That indicates the
4816  * hardware is not running correctly because transmit interrupts are not
4817  * triggered to free up resources so that the transmit routine can continue
4818  * sending out packets.  The hardware is reset to correct the problem.
4819  */
4820 static void netdev_tx_timeout(struct net_device *dev, unsigned int txqueue)
4821 {
4822 	static unsigned long last_reset;
4823 
4824 	struct dev_priv *priv = netdev_priv(dev);
4825 	struct dev_info *hw_priv = priv->adapter;
4826 	struct ksz_hw *hw = &hw_priv->hw;
4827 	int port;
4828 
4829 	if (hw->dev_count > 1) {
4830 		/*
4831 		 * Only reset the hardware if time between calls is long
4832 		 * enough.
4833 		 */
4834 		if (time_before_eq(jiffies, last_reset + dev->watchdog_timeo))
4835 			hw_priv = NULL;
4836 	}
4837 
4838 	last_reset = jiffies;
4839 	if (hw_priv) {
4840 		hw_dis_intr(hw);
4841 		hw_disable(hw);
4842 
4843 		transmit_cleanup(hw_priv, 0);
4844 		hw_reset_pkts(&hw->rx_desc_info);
4845 		hw_reset_pkts(&hw->tx_desc_info);
4846 		ksz_init_rx_buffers(hw_priv);
4847 
4848 		hw_reset(hw);
4849 
4850 		hw_set_desc_base(hw,
4851 			hw->tx_desc_info.ring_phys,
4852 			hw->rx_desc_info.ring_phys);
4853 		hw_set_addr(hw);
4854 		if (hw->all_multi)
4855 			hw_set_multicast(hw, hw->all_multi);
4856 		else if (hw->multi_list_size)
4857 			hw_set_grp_addr(hw);
4858 
4859 		if (hw->dev_count > 1) {
4860 			hw_set_add_addr(hw);
4861 			for (port = 0; port < SWITCH_PORT_NUM; port++) {
4862 				struct net_device *port_dev;
4863 
4864 				port_set_stp_state(hw, port,
4865 					STP_STATE_DISABLED);
4866 
4867 				port_dev = hw->port_info[port].pdev;
4868 				if (netif_running(port_dev))
4869 					port_set_stp_state(hw, port,
4870 						STP_STATE_SIMPLE);
4871 			}
4872 		}
4873 
4874 		hw_enable(hw);
4875 		hw_ena_intr(hw);
4876 	}
4877 
4878 	netif_trans_update(dev);
4879 	netif_wake_queue(dev);
4880 }
4881 
4882 static inline void csum_verified(struct sk_buff *skb)
4883 {
4884 	unsigned short protocol;
4885 	struct iphdr *iph;
4886 
4887 	protocol = skb->protocol;
4888 	skb_reset_network_header(skb);
4889 	iph = (struct iphdr *) skb_network_header(skb);
4890 	if (protocol == htons(ETH_P_8021Q)) {
4891 		protocol = iph->tot_len;
4892 		skb_set_network_header(skb, VLAN_HLEN);
4893 		iph = (struct iphdr *) skb_network_header(skb);
4894 	}
4895 	if (protocol == htons(ETH_P_IP)) {
4896 		if (iph->protocol == IPPROTO_TCP)
4897 			skb->ip_summed = CHECKSUM_UNNECESSARY;
4898 	}
4899 }
4900 
4901 static inline int rx_proc(struct net_device *dev, struct ksz_hw* hw,
4902 	struct ksz_desc *desc, union desc_stat status)
4903 {
4904 	int packet_len;
4905 	struct dev_priv *priv = netdev_priv(dev);
4906 	struct dev_info *hw_priv = priv->adapter;
4907 	struct ksz_dma_buf *dma_buf;
4908 	struct sk_buff *skb;
4909 
4910 	/* Received length includes 4-byte CRC. */
4911 	packet_len = status.rx.frame_len - 4;
4912 
4913 	dma_buf = DMA_BUFFER(desc);
4914 	dma_sync_single_for_cpu(&hw_priv->pdev->dev, dma_buf->dma,
4915 				packet_len + 4, DMA_FROM_DEVICE);
4916 
4917 	do {
4918 		/* skb->data != skb->head */
4919 		skb = netdev_alloc_skb(dev, packet_len + 2);
4920 		if (!skb) {
4921 			dev->stats.rx_dropped++;
4922 			return -ENOMEM;
4923 		}
4924 
4925 		/*
4926 		 * Align socket buffer in 4-byte boundary for better
4927 		 * performance.
4928 		 */
4929 		skb_reserve(skb, 2);
4930 
4931 		skb_put_data(skb, dma_buf->skb->data, packet_len);
4932 	} while (0);
4933 
4934 	skb->protocol = eth_type_trans(skb, dev);
4935 
4936 	if (hw->rx_cfg & (DMA_RX_CSUM_UDP | DMA_RX_CSUM_TCP))
4937 		csum_verified(skb);
4938 
4939 	/* Update receive statistics. */
4940 	dev->stats.rx_packets++;
4941 	dev->stats.rx_bytes += packet_len;
4942 
4943 	/* Notify upper layer for received packet. */
4944 	netif_rx(skb);
4945 
4946 	return 0;
4947 }
4948 
4949 static int dev_rcv_packets(struct dev_info *hw_priv)
4950 {
4951 	int next;
4952 	union desc_stat status;
4953 	struct ksz_hw *hw = &hw_priv->hw;
4954 	struct net_device *dev = hw->port_info[0].pdev;
4955 	struct ksz_desc_info *info = &hw->rx_desc_info;
4956 	int left = info->alloc;
4957 	struct ksz_desc *desc;
4958 	int received = 0;
4959 
4960 	next = info->next;
4961 	while (left--) {
4962 		/* Get next descriptor which is not hardware owned. */
4963 		desc = &info->ring[next];
4964 		status.data = le32_to_cpu(desc->phw->ctrl.data);
4965 		if (status.rx.hw_owned)
4966 			break;
4967 
4968 		/* Status valid only when last descriptor bit is set. */
4969 		if (status.rx.last_desc && status.rx.first_desc) {
4970 			if (rx_proc(dev, hw, desc, status))
4971 				goto release_packet;
4972 			received++;
4973 		}
4974 
4975 release_packet:
4976 		release_desc(desc);
4977 		next++;
4978 		next &= info->mask;
4979 	}
4980 	info->next = next;
4981 
4982 	return received;
4983 }
4984 
4985 static int port_rcv_packets(struct dev_info *hw_priv)
4986 {
4987 	int next;
4988 	union desc_stat status;
4989 	struct ksz_hw *hw = &hw_priv->hw;
4990 	struct net_device *dev = hw->port_info[0].pdev;
4991 	struct ksz_desc_info *info = &hw->rx_desc_info;
4992 	int left = info->alloc;
4993 	struct ksz_desc *desc;
4994 	int received = 0;
4995 
4996 	next = info->next;
4997 	while (left--) {
4998 		/* Get next descriptor which is not hardware owned. */
4999 		desc = &info->ring[next];
5000 		status.data = le32_to_cpu(desc->phw->ctrl.data);
5001 		if (status.rx.hw_owned)
5002 			break;
5003 
5004 		if (hw->dev_count > 1) {
5005 			/* Get received port number. */
5006 			int p = HW_TO_DEV_PORT(status.rx.src_port);
5007 
5008 			dev = hw->port_info[p].pdev;
5009 			if (!netif_running(dev))
5010 				goto release_packet;
5011 		}
5012 
5013 		/* Status valid only when last descriptor bit is set. */
5014 		if (status.rx.last_desc && status.rx.first_desc) {
5015 			if (rx_proc(dev, hw, desc, status))
5016 				goto release_packet;
5017 			received++;
5018 		}
5019 
5020 release_packet:
5021 		release_desc(desc);
5022 		next++;
5023 		next &= info->mask;
5024 	}
5025 	info->next = next;
5026 
5027 	return received;
5028 }
5029 
5030 static int dev_rcv_special(struct dev_info *hw_priv)
5031 {
5032 	int next;
5033 	union desc_stat status;
5034 	struct ksz_hw *hw = &hw_priv->hw;
5035 	struct net_device *dev = hw->port_info[0].pdev;
5036 	struct ksz_desc_info *info = &hw->rx_desc_info;
5037 	int left = info->alloc;
5038 	struct ksz_desc *desc;
5039 	int received = 0;
5040 
5041 	next = info->next;
5042 	while (left--) {
5043 		/* Get next descriptor which is not hardware owned. */
5044 		desc = &info->ring[next];
5045 		status.data = le32_to_cpu(desc->phw->ctrl.data);
5046 		if (status.rx.hw_owned)
5047 			break;
5048 
5049 		if (hw->dev_count > 1) {
5050 			/* Get received port number. */
5051 			int p = HW_TO_DEV_PORT(status.rx.src_port);
5052 
5053 			dev = hw->port_info[p].pdev;
5054 			if (!netif_running(dev))
5055 				goto release_packet;
5056 		}
5057 
5058 		/* Status valid only when last descriptor bit is set. */
5059 		if (status.rx.last_desc && status.rx.first_desc) {
5060 			/*
5061 			 * Receive without error.  With receive errors
5062 			 * disabled, packets with receive errors will be
5063 			 * dropped, so no need to check the error bit.
5064 			 */
5065 			if (!status.rx.error || (status.data &
5066 					KS_DESC_RX_ERROR_COND) ==
5067 					KS_DESC_RX_ERROR_TOO_LONG) {
5068 				if (rx_proc(dev, hw, desc, status))
5069 					goto release_packet;
5070 				received++;
5071 			} else {
5072 				struct dev_priv *priv = netdev_priv(dev);
5073 
5074 				/* Update receive error statistics. */
5075 				priv->port.counter[OID_COUNTER_RCV_ERROR]++;
5076 			}
5077 		}
5078 
5079 release_packet:
5080 		release_desc(desc);
5081 		next++;
5082 		next &= info->mask;
5083 	}
5084 	info->next = next;
5085 
5086 	return received;
5087 }
5088 
5089 static void rx_proc_task(struct tasklet_struct *t)
5090 {
5091 	struct dev_info *hw_priv = from_tasklet(hw_priv, t, rx_tasklet);
5092 	struct ksz_hw *hw = &hw_priv->hw;
5093 
5094 	if (!hw->enabled)
5095 		return;
5096 	if (unlikely(!hw_priv->dev_rcv(hw_priv))) {
5097 
5098 		/* In case receive process is suspended because of overrun. */
5099 		hw_resume_rx(hw);
5100 
5101 		/* tasklets are interruptible. */
5102 		spin_lock_irq(&hw_priv->hwlock);
5103 		hw_turn_on_intr(hw, KS884X_INT_RX_MASK);
5104 		spin_unlock_irq(&hw_priv->hwlock);
5105 	} else {
5106 		hw_ack_intr(hw, KS884X_INT_RX);
5107 		tasklet_schedule(&hw_priv->rx_tasklet);
5108 	}
5109 }
5110 
5111 static void tx_proc_task(struct tasklet_struct *t)
5112 {
5113 	struct dev_info *hw_priv = from_tasklet(hw_priv, t, tx_tasklet);
5114 	struct ksz_hw *hw = &hw_priv->hw;
5115 
5116 	hw_ack_intr(hw, KS884X_INT_TX_MASK);
5117 
5118 	tx_done(hw_priv);
5119 
5120 	/* tasklets are interruptible. */
5121 	spin_lock_irq(&hw_priv->hwlock);
5122 	hw_turn_on_intr(hw, KS884X_INT_TX);
5123 	spin_unlock_irq(&hw_priv->hwlock);
5124 }
5125 
5126 static inline void handle_rx_stop(struct ksz_hw *hw)
5127 {
5128 	/* Receive just has been stopped. */
5129 	if (0 == hw->rx_stop)
5130 		hw->intr_mask &= ~KS884X_INT_RX_STOPPED;
5131 	else if (hw->rx_stop > 1) {
5132 		if (hw->enabled && (hw->rx_cfg & DMA_RX_ENABLE)) {
5133 			hw_start_rx(hw);
5134 		} else {
5135 			hw->intr_mask &= ~KS884X_INT_RX_STOPPED;
5136 			hw->rx_stop = 0;
5137 		}
5138 	} else
5139 		/* Receive just has been started. */
5140 		hw->rx_stop++;
5141 }
5142 
5143 /**
5144  * netdev_intr - interrupt handling
5145  * @irq:	Interrupt number.
5146  * @dev_id:	Network device.
5147  *
5148  * This function is called by upper network layer to signal interrupt.
5149  *
5150  * Return IRQ_HANDLED if interrupt is handled.
5151  */
5152 static irqreturn_t netdev_intr(int irq, void *dev_id)
5153 {
5154 	uint int_enable = 0;
5155 	struct net_device *dev = (struct net_device *) dev_id;
5156 	struct dev_priv *priv = netdev_priv(dev);
5157 	struct dev_info *hw_priv = priv->adapter;
5158 	struct ksz_hw *hw = &hw_priv->hw;
5159 
5160 	spin_lock(&hw_priv->hwlock);
5161 
5162 	hw_read_intr(hw, &int_enable);
5163 
5164 	/* Not our interrupt! */
5165 	if (!int_enable) {
5166 		spin_unlock(&hw_priv->hwlock);
5167 		return IRQ_NONE;
5168 	}
5169 
5170 	do {
5171 		hw_ack_intr(hw, int_enable);
5172 		int_enable &= hw->intr_mask;
5173 
5174 		if (unlikely(int_enable & KS884X_INT_TX_MASK)) {
5175 			hw_dis_intr_bit(hw, KS884X_INT_TX_MASK);
5176 			tasklet_schedule(&hw_priv->tx_tasklet);
5177 		}
5178 
5179 		if (likely(int_enable & KS884X_INT_RX)) {
5180 			hw_dis_intr_bit(hw, KS884X_INT_RX);
5181 			tasklet_schedule(&hw_priv->rx_tasklet);
5182 		}
5183 
5184 		if (unlikely(int_enable & KS884X_INT_RX_OVERRUN)) {
5185 			dev->stats.rx_fifo_errors++;
5186 			hw_resume_rx(hw);
5187 		}
5188 
5189 		if (unlikely(int_enable & KS884X_INT_PHY)) {
5190 			struct ksz_port *port = &priv->port;
5191 
5192 			hw->features |= LINK_INT_WORKING;
5193 			port_get_link_speed(port);
5194 		}
5195 
5196 		if (unlikely(int_enable & KS884X_INT_RX_STOPPED)) {
5197 			handle_rx_stop(hw);
5198 			break;
5199 		}
5200 
5201 		if (unlikely(int_enable & KS884X_INT_TX_STOPPED)) {
5202 			u32 data;
5203 
5204 			hw->intr_mask &= ~KS884X_INT_TX_STOPPED;
5205 			pr_info("Tx stopped\n");
5206 			data = readl(hw->io + KS_DMA_TX_CTRL);
5207 			if (!(data & DMA_TX_ENABLE))
5208 				pr_info("Tx disabled\n");
5209 			break;
5210 		}
5211 	} while (0);
5212 
5213 	hw_ena_intr(hw);
5214 
5215 	spin_unlock(&hw_priv->hwlock);
5216 
5217 	return IRQ_HANDLED;
5218 }
5219 
5220 /*
5221  * Linux network device functions
5222  */
5223 
5224 
5225 #ifdef CONFIG_NET_POLL_CONTROLLER
5226 static void netdev_netpoll(struct net_device *dev)
5227 {
5228 	struct dev_priv *priv = netdev_priv(dev);
5229 	struct dev_info *hw_priv = priv->adapter;
5230 
5231 	hw_dis_intr(&hw_priv->hw);
5232 	netdev_intr(dev->irq, dev);
5233 }
5234 #endif
5235 
5236 static void bridge_change(struct ksz_hw *hw)
5237 {
5238 	int port;
5239 	u8  member;
5240 	struct ksz_switch *sw = hw->ksz_switch;
5241 
5242 	/* No ports in forwarding state. */
5243 	if (!sw->member) {
5244 		port_set_stp_state(hw, SWITCH_PORT_NUM, STP_STATE_SIMPLE);
5245 		sw_block_addr(hw);
5246 	}
5247 	for (port = 0; port < SWITCH_PORT_NUM; port++) {
5248 		if (STP_STATE_FORWARDING == sw->port_cfg[port].stp_state)
5249 			member = HOST_MASK | sw->member;
5250 		else
5251 			member = HOST_MASK | (1 << port);
5252 		if (member != sw->port_cfg[port].member)
5253 			sw_cfg_port_base_vlan(hw, port, member);
5254 	}
5255 }
5256 
5257 /**
5258  * netdev_close - close network device
5259  * @dev:	Network device.
5260  *
5261  * This function process the close operation of network device.  This is caused
5262  * by the user command "ifconfig ethX down."
5263  *
5264  * Return 0 if successful; otherwise an error code indicating failure.
5265  */
5266 static int netdev_close(struct net_device *dev)
5267 {
5268 	struct dev_priv *priv = netdev_priv(dev);
5269 	struct dev_info *hw_priv = priv->adapter;
5270 	struct ksz_port *port = &priv->port;
5271 	struct ksz_hw *hw = &hw_priv->hw;
5272 	int pi;
5273 
5274 	netif_stop_queue(dev);
5275 
5276 	ksz_stop_timer(&priv->monitor_timer_info);
5277 
5278 	/* Need to shut the port manually in multiple device interfaces mode. */
5279 	if (hw->dev_count > 1) {
5280 		port_set_stp_state(hw, port->first_port, STP_STATE_DISABLED);
5281 
5282 		/* Port is closed.  Need to change bridge setting. */
5283 		if (hw->features & STP_SUPPORT) {
5284 			pi = 1 << port->first_port;
5285 			if (hw->ksz_switch->member & pi) {
5286 				hw->ksz_switch->member &= ~pi;
5287 				bridge_change(hw);
5288 			}
5289 		}
5290 	}
5291 	if (port->first_port > 0)
5292 		hw_del_addr(hw, dev->dev_addr);
5293 	if (!hw_priv->wol_enable)
5294 		port_set_power_saving(port, true);
5295 
5296 	if (priv->multicast)
5297 		--hw->all_multi;
5298 	if (priv->promiscuous)
5299 		--hw->promiscuous;
5300 
5301 	hw_priv->opened--;
5302 	if (!(hw_priv->opened)) {
5303 		ksz_stop_timer(&hw_priv->mib_timer_info);
5304 		flush_work(&hw_priv->mib_read);
5305 
5306 		hw_dis_intr(hw);
5307 		hw_disable(hw);
5308 		hw_clr_multicast(hw);
5309 
5310 		/* Delay for receive task to stop scheduling itself. */
5311 		msleep(2000 / HZ);
5312 
5313 		tasklet_kill(&hw_priv->rx_tasklet);
5314 		tasklet_kill(&hw_priv->tx_tasklet);
5315 		free_irq(dev->irq, hw_priv->dev);
5316 
5317 		transmit_cleanup(hw_priv, 0);
5318 		hw_reset_pkts(&hw->rx_desc_info);
5319 		hw_reset_pkts(&hw->tx_desc_info);
5320 
5321 		/* Clean out static MAC table when the switch is shutdown. */
5322 		if (hw->features & STP_SUPPORT)
5323 			sw_clr_sta_mac_table(hw);
5324 	}
5325 
5326 	return 0;
5327 }
5328 
5329 static void hw_cfg_huge_frame(struct dev_info *hw_priv, struct ksz_hw *hw)
5330 {
5331 	if (hw->ksz_switch) {
5332 		u32 data;
5333 
5334 		data = readw(hw->io + KS8842_SWITCH_CTRL_2_OFFSET);
5335 		if (hw->features & RX_HUGE_FRAME)
5336 			data |= SWITCH_HUGE_PACKET;
5337 		else
5338 			data &= ~SWITCH_HUGE_PACKET;
5339 		writew(data, hw->io + KS8842_SWITCH_CTRL_2_OFFSET);
5340 	}
5341 	if (hw->features & RX_HUGE_FRAME) {
5342 		hw->rx_cfg |= DMA_RX_ERROR;
5343 		hw_priv->dev_rcv = dev_rcv_special;
5344 	} else {
5345 		hw->rx_cfg &= ~DMA_RX_ERROR;
5346 		if (hw->dev_count > 1)
5347 			hw_priv->dev_rcv = port_rcv_packets;
5348 		else
5349 			hw_priv->dev_rcv = dev_rcv_packets;
5350 	}
5351 }
5352 
5353 static int prepare_hardware(struct net_device *dev)
5354 {
5355 	struct dev_priv *priv = netdev_priv(dev);
5356 	struct dev_info *hw_priv = priv->adapter;
5357 	struct ksz_hw *hw = &hw_priv->hw;
5358 	int rc = 0;
5359 
5360 	/* Remember the network device that requests interrupts. */
5361 	hw_priv->dev = dev;
5362 	rc = request_irq(dev->irq, netdev_intr, IRQF_SHARED, dev->name, dev);
5363 	if (rc)
5364 		return rc;
5365 	tasklet_setup(&hw_priv->rx_tasklet, rx_proc_task);
5366 	tasklet_setup(&hw_priv->tx_tasklet, tx_proc_task);
5367 
5368 	hw->promiscuous = 0;
5369 	hw->all_multi = 0;
5370 	hw->multi_list_size = 0;
5371 
5372 	hw_reset(hw);
5373 
5374 	hw_set_desc_base(hw,
5375 		hw->tx_desc_info.ring_phys, hw->rx_desc_info.ring_phys);
5376 	hw_set_addr(hw);
5377 	hw_cfg_huge_frame(hw_priv, hw);
5378 	ksz_init_rx_buffers(hw_priv);
5379 	return 0;
5380 }
5381 
5382 static void set_media_state(struct net_device *dev, int media_state)
5383 {
5384 	struct dev_priv *priv = netdev_priv(dev);
5385 
5386 	if (media_state == priv->media_state)
5387 		netif_carrier_on(dev);
5388 	else
5389 		netif_carrier_off(dev);
5390 	netif_info(priv, link, dev, "link %s\n",
5391 		   media_state == priv->media_state ? "on" : "off");
5392 }
5393 
5394 /**
5395  * netdev_open - open network device
5396  * @dev:	Network device.
5397  *
5398  * This function process the open operation of network device.  This is caused
5399  * by the user command "ifconfig ethX up."
5400  *
5401  * Return 0 if successful; otherwise an error code indicating failure.
5402  */
5403 static int netdev_open(struct net_device *dev)
5404 {
5405 	struct dev_priv *priv = netdev_priv(dev);
5406 	struct dev_info *hw_priv = priv->adapter;
5407 	struct ksz_hw *hw = &hw_priv->hw;
5408 	struct ksz_port *port = &priv->port;
5409 	unsigned long next_jiffies;
5410 	int i;
5411 	int p;
5412 	int rc = 0;
5413 
5414 	next_jiffies = jiffies + HZ * 2;
5415 	priv->multicast = 0;
5416 	priv->promiscuous = 0;
5417 
5418 	/* Reset device statistics. */
5419 	memset(&dev->stats, 0, sizeof(struct net_device_stats));
5420 	memset((void *) port->counter, 0,
5421 		(sizeof(u64) * OID_COUNTER_LAST));
5422 
5423 	if (!(hw_priv->opened)) {
5424 		rc = prepare_hardware(dev);
5425 		if (rc)
5426 			return rc;
5427 		for (i = 0; i < hw->mib_port_cnt; i++) {
5428 			next_jiffies += HZ * 1;
5429 			hw_priv->counter[i].time = next_jiffies;
5430 			hw->port_mib[i].state = media_disconnected;
5431 			port_init_cnt(hw, i);
5432 		}
5433 		if (hw->ksz_switch)
5434 			hw->port_mib[HOST_PORT].state = media_connected;
5435 		else {
5436 			hw_add_wol_bcast(hw);
5437 			hw_cfg_wol_pme(hw, 0);
5438 			hw_clr_wol_pme_status(&hw_priv->hw);
5439 		}
5440 	}
5441 	port_set_power_saving(port, false);
5442 
5443 	for (i = 0, p = port->first_port; i < port->port_cnt; i++, p++) {
5444 		/*
5445 		 * Initialize to invalid value so that link detection
5446 		 * is done.
5447 		 */
5448 		hw->port_info[p].partner = 0xFF;
5449 		hw->port_info[p].state = media_disconnected;
5450 	}
5451 
5452 	/* Need to open the port in multiple device interfaces mode. */
5453 	if (hw->dev_count > 1) {
5454 		port_set_stp_state(hw, port->first_port, STP_STATE_SIMPLE);
5455 		if (port->first_port > 0)
5456 			hw_add_addr(hw, dev->dev_addr);
5457 	}
5458 
5459 	port_get_link_speed(port);
5460 	if (port->force_link)
5461 		port_force_link_speed(port);
5462 	else
5463 		port_set_link_speed(port);
5464 
5465 	if (!(hw_priv->opened)) {
5466 		hw_setup_intr(hw);
5467 		hw_enable(hw);
5468 		hw_ena_intr(hw);
5469 
5470 		if (hw->mib_port_cnt)
5471 			ksz_start_timer(&hw_priv->mib_timer_info,
5472 				hw_priv->mib_timer_info.period);
5473 	}
5474 
5475 	hw_priv->opened++;
5476 
5477 	ksz_start_timer(&priv->monitor_timer_info,
5478 		priv->monitor_timer_info.period);
5479 
5480 	priv->media_state = port->linked->state;
5481 
5482 	set_media_state(dev, media_connected);
5483 	netif_start_queue(dev);
5484 
5485 	return 0;
5486 }
5487 
5488 /* RX errors = rx_errors */
5489 /* RX dropped = rx_dropped */
5490 /* RX overruns = rx_fifo_errors */
5491 /* RX frame = rx_crc_errors + rx_frame_errors + rx_length_errors */
5492 /* TX errors = tx_errors */
5493 /* TX dropped = tx_dropped */
5494 /* TX overruns = tx_fifo_errors */
5495 /* TX carrier = tx_aborted_errors + tx_carrier_errors + tx_window_errors */
5496 /* collisions = collisions */
5497 
5498 /**
5499  * netdev_query_statistics - query network device statistics
5500  * @dev:	Network device.
5501  *
5502  * This function returns the statistics of the network device.  The device
5503  * needs not be opened.
5504  *
5505  * Return network device statistics.
5506  */
5507 static struct net_device_stats *netdev_query_statistics(struct net_device *dev)
5508 {
5509 	struct dev_priv *priv = netdev_priv(dev);
5510 	struct ksz_port *port = &priv->port;
5511 	struct ksz_hw *hw = &priv->adapter->hw;
5512 	struct ksz_port_mib *mib;
5513 	int i;
5514 	int p;
5515 
5516 	dev->stats.rx_errors = port->counter[OID_COUNTER_RCV_ERROR];
5517 	dev->stats.tx_errors = port->counter[OID_COUNTER_XMIT_ERROR];
5518 
5519 	/* Reset to zero to add count later. */
5520 	dev->stats.multicast = 0;
5521 	dev->stats.collisions = 0;
5522 	dev->stats.rx_length_errors = 0;
5523 	dev->stats.rx_crc_errors = 0;
5524 	dev->stats.rx_frame_errors = 0;
5525 	dev->stats.tx_window_errors = 0;
5526 
5527 	for (i = 0, p = port->first_port; i < port->mib_port_cnt; i++, p++) {
5528 		mib = &hw->port_mib[p];
5529 
5530 		dev->stats.multicast += (unsigned long)
5531 			mib->counter[MIB_COUNTER_RX_MULTICAST];
5532 
5533 		dev->stats.collisions += (unsigned long)
5534 			mib->counter[MIB_COUNTER_TX_TOTAL_COLLISION];
5535 
5536 		dev->stats.rx_length_errors += (unsigned long)(
5537 			mib->counter[MIB_COUNTER_RX_UNDERSIZE] +
5538 			mib->counter[MIB_COUNTER_RX_FRAGMENT] +
5539 			mib->counter[MIB_COUNTER_RX_OVERSIZE] +
5540 			mib->counter[MIB_COUNTER_RX_JABBER]);
5541 		dev->stats.rx_crc_errors += (unsigned long)
5542 			mib->counter[MIB_COUNTER_RX_CRC_ERR];
5543 		dev->stats.rx_frame_errors += (unsigned long)(
5544 			mib->counter[MIB_COUNTER_RX_ALIGNMENT_ERR] +
5545 			mib->counter[MIB_COUNTER_RX_SYMBOL_ERR]);
5546 
5547 		dev->stats.tx_window_errors += (unsigned long)
5548 			mib->counter[MIB_COUNTER_TX_LATE_COLLISION];
5549 	}
5550 
5551 	return &dev->stats;
5552 }
5553 
5554 /**
5555  * netdev_set_mac_address - set network device MAC address
5556  * @dev:	Network device.
5557  * @addr:	Buffer of MAC address.
5558  *
5559  * This function is used to set the MAC address of the network device.
5560  *
5561  * Return 0 to indicate success.
5562  */
5563 static int netdev_set_mac_address(struct net_device *dev, void *addr)
5564 {
5565 	struct dev_priv *priv = netdev_priv(dev);
5566 	struct dev_info *hw_priv = priv->adapter;
5567 	struct ksz_hw *hw = &hw_priv->hw;
5568 	struct sockaddr *mac = addr;
5569 	uint interrupt;
5570 
5571 	if (priv->port.first_port > 0)
5572 		hw_del_addr(hw, dev->dev_addr);
5573 	else {
5574 		hw->mac_override = 1;
5575 		memcpy(hw->override_addr, mac->sa_data, ETH_ALEN);
5576 	}
5577 
5578 	eth_hw_addr_set(dev, mac->sa_data);
5579 
5580 	interrupt = hw_block_intr(hw);
5581 
5582 	if (priv->port.first_port > 0)
5583 		hw_add_addr(hw, dev->dev_addr);
5584 	else
5585 		hw_set_addr(hw);
5586 	hw_restore_intr(hw, interrupt);
5587 
5588 	return 0;
5589 }
5590 
5591 static void dev_set_promiscuous(struct net_device *dev, struct dev_priv *priv,
5592 	struct ksz_hw *hw, int promiscuous)
5593 {
5594 	if (promiscuous != priv->promiscuous) {
5595 		u8 prev_state = hw->promiscuous;
5596 
5597 		if (promiscuous)
5598 			++hw->promiscuous;
5599 		else
5600 			--hw->promiscuous;
5601 		priv->promiscuous = promiscuous;
5602 
5603 		/* Turn on/off promiscuous mode. */
5604 		if (hw->promiscuous <= 1 && prev_state <= 1)
5605 			hw_set_promiscuous(hw, hw->promiscuous);
5606 
5607 		/*
5608 		 * Port is not in promiscuous mode, meaning it is released
5609 		 * from the bridge.
5610 		 */
5611 		if ((hw->features & STP_SUPPORT) && !promiscuous &&
5612 		    netif_is_bridge_port(dev)) {
5613 			struct ksz_switch *sw = hw->ksz_switch;
5614 			int port = priv->port.first_port;
5615 
5616 			port_set_stp_state(hw, port, STP_STATE_DISABLED);
5617 			port = 1 << port;
5618 			if (sw->member & port) {
5619 				sw->member &= ~port;
5620 				bridge_change(hw);
5621 			}
5622 		}
5623 	}
5624 }
5625 
5626 static void dev_set_multicast(struct dev_priv *priv, struct ksz_hw *hw,
5627 	int multicast)
5628 {
5629 	if (multicast != priv->multicast) {
5630 		u8 all_multi = hw->all_multi;
5631 
5632 		if (multicast)
5633 			++hw->all_multi;
5634 		else
5635 			--hw->all_multi;
5636 		priv->multicast = multicast;
5637 
5638 		/* Turn on/off all multicast mode. */
5639 		if (hw->all_multi <= 1 && all_multi <= 1)
5640 			hw_set_multicast(hw, hw->all_multi);
5641 	}
5642 }
5643 
5644 /**
5645  * netdev_set_rx_mode
5646  * @dev:	Network device.
5647  *
5648  * This routine is used to set multicast addresses or put the network device
5649  * into promiscuous mode.
5650  */
5651 static void netdev_set_rx_mode(struct net_device *dev)
5652 {
5653 	struct dev_priv *priv = netdev_priv(dev);
5654 	struct dev_info *hw_priv = priv->adapter;
5655 	struct ksz_hw *hw = &hw_priv->hw;
5656 	struct netdev_hw_addr *ha;
5657 	int multicast = (dev->flags & IFF_ALLMULTI);
5658 
5659 	dev_set_promiscuous(dev, priv, hw, (dev->flags & IFF_PROMISC));
5660 
5661 	if (hw_priv->hw.dev_count > 1)
5662 		multicast |= (dev->flags & IFF_MULTICAST);
5663 	dev_set_multicast(priv, hw, multicast);
5664 
5665 	/* Cannot use different hashes in multiple device interfaces mode. */
5666 	if (hw_priv->hw.dev_count > 1)
5667 		return;
5668 
5669 	if ((dev->flags & IFF_MULTICAST) && !netdev_mc_empty(dev)) {
5670 		int i = 0;
5671 
5672 		/* List too big to support so turn on all multicast mode. */
5673 		if (netdev_mc_count(dev) > MAX_MULTICAST_LIST) {
5674 			if (MAX_MULTICAST_LIST != hw->multi_list_size) {
5675 				hw->multi_list_size = MAX_MULTICAST_LIST;
5676 				++hw->all_multi;
5677 				hw_set_multicast(hw, hw->all_multi);
5678 			}
5679 			return;
5680 		}
5681 
5682 		netdev_for_each_mc_addr(ha, dev) {
5683 			if (i >= MAX_MULTICAST_LIST)
5684 				break;
5685 			memcpy(hw->multi_list[i++], ha->addr, ETH_ALEN);
5686 		}
5687 		hw->multi_list_size = (u8) i;
5688 		hw_set_grp_addr(hw);
5689 	} else {
5690 		if (MAX_MULTICAST_LIST == hw->multi_list_size) {
5691 			--hw->all_multi;
5692 			hw_set_multicast(hw, hw->all_multi);
5693 		}
5694 		hw->multi_list_size = 0;
5695 		hw_clr_multicast(hw);
5696 	}
5697 }
5698 
5699 static int netdev_change_mtu(struct net_device *dev, int new_mtu)
5700 {
5701 	struct dev_priv *priv = netdev_priv(dev);
5702 	struct dev_info *hw_priv = priv->adapter;
5703 	struct ksz_hw *hw = &hw_priv->hw;
5704 	int hw_mtu;
5705 
5706 	if (netif_running(dev))
5707 		return -EBUSY;
5708 
5709 	/* Cannot use different MTU in multiple device interfaces mode. */
5710 	if (hw->dev_count > 1)
5711 		if (dev != hw_priv->dev)
5712 			return 0;
5713 
5714 	hw_mtu = new_mtu + ETHERNET_HEADER_SIZE + 4;
5715 	if (hw_mtu > REGULAR_RX_BUF_SIZE) {
5716 		hw->features |= RX_HUGE_FRAME;
5717 		hw_mtu = MAX_RX_BUF_SIZE;
5718 	} else {
5719 		hw->features &= ~RX_HUGE_FRAME;
5720 		hw_mtu = REGULAR_RX_BUF_SIZE;
5721 	}
5722 	hw_mtu = (hw_mtu + 3) & ~3;
5723 	hw_priv->mtu = hw_mtu;
5724 	dev->mtu = new_mtu;
5725 
5726 	return 0;
5727 }
5728 
5729 /**
5730  * netdev_ioctl - I/O control processing
5731  * @dev:	Network device.
5732  * @ifr:	Interface request structure.
5733  * @cmd:	I/O control code.
5734  *
5735  * This function is used to process I/O control calls.
5736  *
5737  * Return 0 to indicate success.
5738  */
5739 static int netdev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
5740 {
5741 	struct dev_priv *priv = netdev_priv(dev);
5742 	struct dev_info *hw_priv = priv->adapter;
5743 	struct ksz_hw *hw = &hw_priv->hw;
5744 	struct ksz_port *port = &priv->port;
5745 	int result = 0;
5746 	struct mii_ioctl_data *data = if_mii(ifr);
5747 
5748 	if (down_interruptible(&priv->proc_sem))
5749 		return -ERESTARTSYS;
5750 
5751 	switch (cmd) {
5752 	/* Get address of MII PHY in use. */
5753 	case SIOCGMIIPHY:
5754 		data->phy_id = priv->id;
5755 		fallthrough;
5756 
5757 	/* Read MII PHY register. */
5758 	case SIOCGMIIREG:
5759 		if (data->phy_id != priv->id || data->reg_num >= 6)
5760 			result = -EIO;
5761 		else
5762 			hw_r_phy(hw, port->linked->port_id, data->reg_num,
5763 				&data->val_out);
5764 		break;
5765 
5766 	/* Write MII PHY register. */
5767 	case SIOCSMIIREG:
5768 		if (!capable(CAP_NET_ADMIN))
5769 			result = -EPERM;
5770 		else if (data->phy_id != priv->id || data->reg_num >= 6)
5771 			result = -EIO;
5772 		else
5773 			hw_w_phy(hw, port->linked->port_id, data->reg_num,
5774 				data->val_in);
5775 		break;
5776 
5777 	default:
5778 		result = -EOPNOTSUPP;
5779 	}
5780 
5781 	up(&priv->proc_sem);
5782 
5783 	return result;
5784 }
5785 
5786 /*
5787  * MII support
5788  */
5789 
5790 /**
5791  * mdio_read - read PHY register
5792  * @dev:	Network device.
5793  * @phy_id:	The PHY id.
5794  * @reg_num:	The register number.
5795  *
5796  * This function returns the PHY register value.
5797  *
5798  * Return the register value.
5799  */
5800 static int mdio_read(struct net_device *dev, int phy_id, int reg_num)
5801 {
5802 	struct dev_priv *priv = netdev_priv(dev);
5803 	struct ksz_port *port = &priv->port;
5804 	struct ksz_hw *hw = port->hw;
5805 	u16 val_out;
5806 
5807 	hw_r_phy(hw, port->linked->port_id, reg_num << 1, &val_out);
5808 	return val_out;
5809 }
5810 
5811 /**
5812  * mdio_write - set PHY register
5813  * @dev:	Network device.
5814  * @phy_id:	The PHY id.
5815  * @reg_num:	The register number.
5816  * @val:	The register value.
5817  *
5818  * This procedure sets the PHY register value.
5819  */
5820 static void mdio_write(struct net_device *dev, int phy_id, int reg_num, int val)
5821 {
5822 	struct dev_priv *priv = netdev_priv(dev);
5823 	struct ksz_port *port = &priv->port;
5824 	struct ksz_hw *hw = port->hw;
5825 	int i;
5826 	int pi;
5827 
5828 	for (i = 0, pi = port->first_port; i < port->port_cnt; i++, pi++)
5829 		hw_w_phy(hw, pi, reg_num << 1, val);
5830 }
5831 
5832 /*
5833  * ethtool support
5834  */
5835 
5836 #define EEPROM_SIZE			0x40
5837 
5838 static u16 eeprom_data[EEPROM_SIZE] = { 0 };
5839 
5840 #define ADVERTISED_ALL			\
5841 	(ADVERTISED_10baseT_Half |	\
5842 	ADVERTISED_10baseT_Full |	\
5843 	ADVERTISED_100baseT_Half |	\
5844 	ADVERTISED_100baseT_Full)
5845 
5846 /* These functions use the MII functions in mii.c. */
5847 
5848 /**
5849  * netdev_get_link_ksettings - get network device settings
5850  * @dev:	Network device.
5851  * @cmd:	Ethtool command.
5852  *
5853  * This function queries the PHY and returns its state in the ethtool command.
5854  *
5855  * Return 0 if successful; otherwise an error code.
5856  */
5857 static int netdev_get_link_ksettings(struct net_device *dev,
5858 				     struct ethtool_link_ksettings *cmd)
5859 {
5860 	struct dev_priv *priv = netdev_priv(dev);
5861 	struct dev_info *hw_priv = priv->adapter;
5862 
5863 	mutex_lock(&hw_priv->lock);
5864 	mii_ethtool_get_link_ksettings(&priv->mii_if, cmd);
5865 	ethtool_link_ksettings_add_link_mode(cmd, advertising, TP);
5866 	mutex_unlock(&hw_priv->lock);
5867 
5868 	/* Save advertised settings for workaround in next function. */
5869 	ethtool_convert_link_mode_to_legacy_u32(&priv->advertising,
5870 						cmd->link_modes.advertising);
5871 
5872 	return 0;
5873 }
5874 
5875 /**
5876  * netdev_set_link_ksettings - set network device settings
5877  * @dev:	Network device.
5878  * @cmd:	Ethtool command.
5879  *
5880  * This function sets the PHY according to the ethtool command.
5881  *
5882  * Return 0 if successful; otherwise an error code.
5883  */
5884 static int netdev_set_link_ksettings(struct net_device *dev,
5885 				     const struct ethtool_link_ksettings *cmd)
5886 {
5887 	struct dev_priv *priv = netdev_priv(dev);
5888 	struct dev_info *hw_priv = priv->adapter;
5889 	struct ksz_port *port = &priv->port;
5890 	struct ethtool_link_ksettings copy_cmd;
5891 	u32 speed = cmd->base.speed;
5892 	u32 advertising;
5893 	int rc;
5894 
5895 	ethtool_convert_link_mode_to_legacy_u32(&advertising,
5896 						cmd->link_modes.advertising);
5897 
5898 	/*
5899 	 * ethtool utility does not change advertised setting if auto
5900 	 * negotiation is not specified explicitly.
5901 	 */
5902 	if (cmd->base.autoneg && priv->advertising == advertising) {
5903 		advertising |= ADVERTISED_ALL;
5904 		if (10 == speed)
5905 			advertising &=
5906 				~(ADVERTISED_100baseT_Full |
5907 				ADVERTISED_100baseT_Half);
5908 		else if (100 == speed)
5909 			advertising &=
5910 				~(ADVERTISED_10baseT_Full |
5911 				ADVERTISED_10baseT_Half);
5912 		if (0 == cmd->base.duplex)
5913 			advertising &=
5914 				~(ADVERTISED_100baseT_Full |
5915 				ADVERTISED_10baseT_Full);
5916 		else if (1 == cmd->base.duplex)
5917 			advertising &=
5918 				~(ADVERTISED_100baseT_Half |
5919 				ADVERTISED_10baseT_Half);
5920 	}
5921 	mutex_lock(&hw_priv->lock);
5922 	if (cmd->base.autoneg &&
5923 	    (advertising & ADVERTISED_ALL) == ADVERTISED_ALL) {
5924 		port->duplex = 0;
5925 		port->speed = 0;
5926 		port->force_link = 0;
5927 	} else {
5928 		port->duplex = cmd->base.duplex + 1;
5929 		if (1000 != speed)
5930 			port->speed = speed;
5931 		if (cmd->base.autoneg)
5932 			port->force_link = 0;
5933 		else
5934 			port->force_link = 1;
5935 	}
5936 
5937 	memcpy(&copy_cmd, cmd, sizeof(copy_cmd));
5938 	ethtool_convert_legacy_u32_to_link_mode(copy_cmd.link_modes.advertising,
5939 						advertising);
5940 	rc = mii_ethtool_set_link_ksettings(
5941 		&priv->mii_if,
5942 		(const struct ethtool_link_ksettings *)&copy_cmd);
5943 	mutex_unlock(&hw_priv->lock);
5944 	return rc;
5945 }
5946 
5947 /**
5948  * netdev_nway_reset - restart auto-negotiation
5949  * @dev:	Network device.
5950  *
5951  * This function restarts the PHY for auto-negotiation.
5952  *
5953  * Return 0 if successful; otherwise an error code.
5954  */
5955 static int netdev_nway_reset(struct net_device *dev)
5956 {
5957 	struct dev_priv *priv = netdev_priv(dev);
5958 	struct dev_info *hw_priv = priv->adapter;
5959 	int rc;
5960 
5961 	mutex_lock(&hw_priv->lock);
5962 	rc = mii_nway_restart(&priv->mii_if);
5963 	mutex_unlock(&hw_priv->lock);
5964 	return rc;
5965 }
5966 
5967 /**
5968  * netdev_get_link - get network device link status
5969  * @dev:	Network device.
5970  *
5971  * This function gets the link status from the PHY.
5972  *
5973  * Return true if PHY is linked and false otherwise.
5974  */
5975 static u32 netdev_get_link(struct net_device *dev)
5976 {
5977 	struct dev_priv *priv = netdev_priv(dev);
5978 	int rc;
5979 
5980 	rc = mii_link_ok(&priv->mii_if);
5981 	return rc;
5982 }
5983 
5984 /**
5985  * netdev_get_drvinfo - get network driver information
5986  * @dev:	Network device.
5987  * @info:	Ethtool driver info data structure.
5988  *
5989  * This procedure returns the driver information.
5990  */
5991 static void netdev_get_drvinfo(struct net_device *dev,
5992 	struct ethtool_drvinfo *info)
5993 {
5994 	struct dev_priv *priv = netdev_priv(dev);
5995 	struct dev_info *hw_priv = priv->adapter;
5996 
5997 	strscpy(info->driver, DRV_NAME, sizeof(info->driver));
5998 	strscpy(info->version, DRV_VERSION, sizeof(info->version));
5999 	strscpy(info->bus_info, pci_name(hw_priv->pdev),
6000 		sizeof(info->bus_info));
6001 }
6002 
6003 static struct hw_regs {
6004 	int start;
6005 	int end;
6006 } hw_regs_range[] = {
6007 	{ KS_DMA_TX_CTRL,	KS884X_INTERRUPTS_STATUS },
6008 	{ KS_ADD_ADDR_0_LO,	KS_ADD_ADDR_F_HI },
6009 	{ KS884X_ADDR_0_OFFSET,	KS8841_WOL_FRAME_BYTE2_OFFSET },
6010 	{ KS884X_SIDER_P,	KS8842_SGCR7_P },
6011 	{ KS8842_MACAR1_P,	KS8842_TOSR8_P },
6012 	{ KS884X_P1MBCR_P,	KS8842_P3ERCR_P },
6013 	{ 0, 0 }
6014 };
6015 
6016 /**
6017  * netdev_get_regs_len - get length of register dump
6018  * @dev:	Network device.
6019  *
6020  * This function returns the length of the register dump.
6021  *
6022  * Return length of the register dump.
6023  */
6024 static int netdev_get_regs_len(struct net_device *dev)
6025 {
6026 	struct hw_regs *range = hw_regs_range;
6027 	int regs_len = 0x10 * sizeof(u32);
6028 
6029 	while (range->end > range->start) {
6030 		regs_len += (range->end - range->start + 3) / 4 * 4;
6031 		range++;
6032 	}
6033 	return regs_len;
6034 }
6035 
6036 /**
6037  * netdev_get_regs - get register dump
6038  * @dev:	Network device.
6039  * @regs:	Ethtool registers data structure.
6040  * @ptr:	Buffer to store the register values.
6041  *
6042  * This procedure dumps the register values in the provided buffer.
6043  */
6044 static void netdev_get_regs(struct net_device *dev, struct ethtool_regs *regs,
6045 	void *ptr)
6046 {
6047 	struct dev_priv *priv = netdev_priv(dev);
6048 	struct dev_info *hw_priv = priv->adapter;
6049 	struct ksz_hw *hw = &hw_priv->hw;
6050 	int *buf = (int *) ptr;
6051 	struct hw_regs *range = hw_regs_range;
6052 	int len;
6053 
6054 	mutex_lock(&hw_priv->lock);
6055 	regs->version = 0;
6056 	for (len = 0; len < 0x40; len += 4) {
6057 		pci_read_config_dword(hw_priv->pdev, len, buf);
6058 		buf++;
6059 	}
6060 	while (range->end > range->start) {
6061 		for (len = range->start; len < range->end; len += 4) {
6062 			*buf = readl(hw->io + len);
6063 			buf++;
6064 		}
6065 		range++;
6066 	}
6067 	mutex_unlock(&hw_priv->lock);
6068 }
6069 
6070 #define WOL_SUPPORT			\
6071 	(WAKE_PHY | WAKE_MAGIC |	\
6072 	WAKE_UCAST | WAKE_MCAST |	\
6073 	WAKE_BCAST | WAKE_ARP)
6074 
6075 /**
6076  * netdev_get_wol - get Wake-on-LAN support
6077  * @dev:	Network device.
6078  * @wol:	Ethtool Wake-on-LAN data structure.
6079  *
6080  * This procedure returns Wake-on-LAN support.
6081  */
6082 static void netdev_get_wol(struct net_device *dev,
6083 	struct ethtool_wolinfo *wol)
6084 {
6085 	struct dev_priv *priv = netdev_priv(dev);
6086 	struct dev_info *hw_priv = priv->adapter;
6087 
6088 	wol->supported = hw_priv->wol_support;
6089 	wol->wolopts = hw_priv->wol_enable;
6090 	memset(&wol->sopass, 0, sizeof(wol->sopass));
6091 }
6092 
6093 /**
6094  * netdev_set_wol - set Wake-on-LAN support
6095  * @dev:	Network device.
6096  * @wol:	Ethtool Wake-on-LAN data structure.
6097  *
6098  * This function sets Wake-on-LAN support.
6099  *
6100  * Return 0 if successful; otherwise an error code.
6101  */
6102 static int netdev_set_wol(struct net_device *dev,
6103 	struct ethtool_wolinfo *wol)
6104 {
6105 	struct dev_priv *priv = netdev_priv(dev);
6106 	struct dev_info *hw_priv = priv->adapter;
6107 
6108 	/* Need to find a way to retrieve the device IP address. */
6109 	static const u8 net_addr[] = { 192, 168, 1, 1 };
6110 
6111 	if (wol->wolopts & ~hw_priv->wol_support)
6112 		return -EINVAL;
6113 
6114 	hw_priv->wol_enable = wol->wolopts;
6115 
6116 	/* Link wakeup cannot really be disabled. */
6117 	if (wol->wolopts)
6118 		hw_priv->wol_enable |= WAKE_PHY;
6119 	hw_enable_wol(&hw_priv->hw, hw_priv->wol_enable, net_addr);
6120 	return 0;
6121 }
6122 
6123 /**
6124  * netdev_get_msglevel - get debug message level
6125  * @dev:	Network device.
6126  *
6127  * This function returns current debug message level.
6128  *
6129  * Return current debug message flags.
6130  */
6131 static u32 netdev_get_msglevel(struct net_device *dev)
6132 {
6133 	struct dev_priv *priv = netdev_priv(dev);
6134 
6135 	return priv->msg_enable;
6136 }
6137 
6138 /**
6139  * netdev_set_msglevel - set debug message level
6140  * @dev:	Network device.
6141  * @value:	Debug message flags.
6142  *
6143  * This procedure sets debug message level.
6144  */
6145 static void netdev_set_msglevel(struct net_device *dev, u32 value)
6146 {
6147 	struct dev_priv *priv = netdev_priv(dev);
6148 
6149 	priv->msg_enable = value;
6150 }
6151 
6152 /**
6153  * netdev_get_eeprom_len - get EEPROM length
6154  * @dev:	Network device.
6155  *
6156  * This function returns the length of the EEPROM.
6157  *
6158  * Return length of the EEPROM.
6159  */
6160 static int netdev_get_eeprom_len(struct net_device *dev)
6161 {
6162 	return EEPROM_SIZE * 2;
6163 }
6164 
6165 #define EEPROM_MAGIC			0x10A18842
6166 
6167 /**
6168  * netdev_get_eeprom - get EEPROM data
6169  * @dev:	Network device.
6170  * @eeprom:	Ethtool EEPROM data structure.
6171  * @data:	Buffer to store the EEPROM data.
6172  *
6173  * This function dumps the EEPROM data in the provided buffer.
6174  *
6175  * Return 0 if successful; otherwise an error code.
6176  */
6177 static int netdev_get_eeprom(struct net_device *dev,
6178 	struct ethtool_eeprom *eeprom, u8 *data)
6179 {
6180 	struct dev_priv *priv = netdev_priv(dev);
6181 	struct dev_info *hw_priv = priv->adapter;
6182 	u8 *eeprom_byte = (u8 *) eeprom_data;
6183 	int i;
6184 	int len;
6185 
6186 	len = (eeprom->offset + eeprom->len + 1) / 2;
6187 	for (i = eeprom->offset / 2; i < len; i++)
6188 		eeprom_data[i] = eeprom_read(&hw_priv->hw, i);
6189 	eeprom->magic = EEPROM_MAGIC;
6190 	memcpy(data, &eeprom_byte[eeprom->offset], eeprom->len);
6191 
6192 	return 0;
6193 }
6194 
6195 /**
6196  * netdev_set_eeprom - write EEPROM data
6197  * @dev:	Network device.
6198  * @eeprom:	Ethtool EEPROM data structure.
6199  * @data:	Data buffer.
6200  *
6201  * This function modifies the EEPROM data one byte at a time.
6202  *
6203  * Return 0 if successful; otherwise an error code.
6204  */
6205 static int netdev_set_eeprom(struct net_device *dev,
6206 	struct ethtool_eeprom *eeprom, u8 *data)
6207 {
6208 	struct dev_priv *priv = netdev_priv(dev);
6209 	struct dev_info *hw_priv = priv->adapter;
6210 	u16 eeprom_word[EEPROM_SIZE];
6211 	u8 *eeprom_byte = (u8 *) eeprom_word;
6212 	int i;
6213 	int len;
6214 
6215 	if (eeprom->magic != EEPROM_MAGIC)
6216 		return -EINVAL;
6217 
6218 	len = (eeprom->offset + eeprom->len + 1) / 2;
6219 	for (i = eeprom->offset / 2; i < len; i++)
6220 		eeprom_data[i] = eeprom_read(&hw_priv->hw, i);
6221 	memcpy(eeprom_word, eeprom_data, EEPROM_SIZE * 2);
6222 	memcpy(&eeprom_byte[eeprom->offset], data, eeprom->len);
6223 	for (i = 0; i < EEPROM_SIZE; i++)
6224 		if (eeprom_word[i] != eeprom_data[i]) {
6225 			eeprom_data[i] = eeprom_word[i];
6226 			eeprom_write(&hw_priv->hw, i, eeprom_data[i]);
6227 	}
6228 
6229 	return 0;
6230 }
6231 
6232 /**
6233  * netdev_get_pauseparam - get flow control parameters
6234  * @dev:	Network device.
6235  * @pause:	Ethtool PAUSE settings data structure.
6236  *
6237  * This procedure returns the PAUSE control flow settings.
6238  */
6239 static void netdev_get_pauseparam(struct net_device *dev,
6240 	struct ethtool_pauseparam *pause)
6241 {
6242 	struct dev_priv *priv = netdev_priv(dev);
6243 	struct dev_info *hw_priv = priv->adapter;
6244 	struct ksz_hw *hw = &hw_priv->hw;
6245 
6246 	pause->autoneg = (hw->overrides & PAUSE_FLOW_CTRL) ? 0 : 1;
6247 	if (!hw->ksz_switch) {
6248 		pause->rx_pause =
6249 			(hw->rx_cfg & DMA_RX_FLOW_ENABLE) ? 1 : 0;
6250 		pause->tx_pause =
6251 			(hw->tx_cfg & DMA_TX_FLOW_ENABLE) ? 1 : 0;
6252 	} else {
6253 		pause->rx_pause =
6254 			(sw_chk(hw, KS8842_SWITCH_CTRL_1_OFFSET,
6255 				SWITCH_RX_FLOW_CTRL)) ? 1 : 0;
6256 		pause->tx_pause =
6257 			(sw_chk(hw, KS8842_SWITCH_CTRL_1_OFFSET,
6258 				SWITCH_TX_FLOW_CTRL)) ? 1 : 0;
6259 	}
6260 }
6261 
6262 /**
6263  * netdev_set_pauseparam - set flow control parameters
6264  * @dev:	Network device.
6265  * @pause:	Ethtool PAUSE settings data structure.
6266  *
6267  * This function sets the PAUSE control flow settings.
6268  * Not implemented yet.
6269  *
6270  * Return 0 if successful; otherwise an error code.
6271  */
6272 static int netdev_set_pauseparam(struct net_device *dev,
6273 	struct ethtool_pauseparam *pause)
6274 {
6275 	struct dev_priv *priv = netdev_priv(dev);
6276 	struct dev_info *hw_priv = priv->adapter;
6277 	struct ksz_hw *hw = &hw_priv->hw;
6278 	struct ksz_port *port = &priv->port;
6279 
6280 	mutex_lock(&hw_priv->lock);
6281 	if (pause->autoneg) {
6282 		if (!pause->rx_pause && !pause->tx_pause)
6283 			port->flow_ctrl = PHY_NO_FLOW_CTRL;
6284 		else
6285 			port->flow_ctrl = PHY_FLOW_CTRL;
6286 		hw->overrides &= ~PAUSE_FLOW_CTRL;
6287 		port->force_link = 0;
6288 		if (hw->ksz_switch) {
6289 			sw_cfg(hw, KS8842_SWITCH_CTRL_1_OFFSET,
6290 				SWITCH_RX_FLOW_CTRL, 1);
6291 			sw_cfg(hw, KS8842_SWITCH_CTRL_1_OFFSET,
6292 				SWITCH_TX_FLOW_CTRL, 1);
6293 		}
6294 		port_set_link_speed(port);
6295 	} else {
6296 		hw->overrides |= PAUSE_FLOW_CTRL;
6297 		if (hw->ksz_switch) {
6298 			sw_cfg(hw, KS8842_SWITCH_CTRL_1_OFFSET,
6299 				SWITCH_RX_FLOW_CTRL, pause->rx_pause);
6300 			sw_cfg(hw, KS8842_SWITCH_CTRL_1_OFFSET,
6301 				SWITCH_TX_FLOW_CTRL, pause->tx_pause);
6302 		} else
6303 			set_flow_ctrl(hw, pause->rx_pause, pause->tx_pause);
6304 	}
6305 	mutex_unlock(&hw_priv->lock);
6306 
6307 	return 0;
6308 }
6309 
6310 /**
6311  * netdev_get_ringparam - get tx/rx ring parameters
6312  * @dev:	Network device.
6313  * @ring:	Ethtool RING settings data structure.
6314  * @kernel_ring:	Ethtool external RING settings data structure.
6315  * @extack:	Netlink handle.
6316  *
6317  * This procedure returns the TX/RX ring settings.
6318  */
6319 static void netdev_get_ringparam(struct net_device *dev,
6320 				 struct ethtool_ringparam *ring,
6321 				 struct kernel_ethtool_ringparam *kernel_ring,
6322 				 struct netlink_ext_ack *extack)
6323 {
6324 	struct dev_priv *priv = netdev_priv(dev);
6325 	struct dev_info *hw_priv = priv->adapter;
6326 	struct ksz_hw *hw = &hw_priv->hw;
6327 
6328 	ring->tx_max_pending = (1 << 9);
6329 	ring->tx_pending = hw->tx_desc_info.alloc;
6330 	ring->rx_max_pending = (1 << 9);
6331 	ring->rx_pending = hw->rx_desc_info.alloc;
6332 }
6333 
6334 #define STATS_LEN			(TOTAL_PORT_COUNTER_NUM)
6335 
6336 static struct {
6337 	char string[ETH_GSTRING_LEN];
6338 } ethtool_stats_keys[STATS_LEN] = {
6339 	{ "rx_lo_priority_octets" },
6340 	{ "rx_hi_priority_octets" },
6341 	{ "rx_undersize_packets" },
6342 	{ "rx_fragments" },
6343 	{ "rx_oversize_packets" },
6344 	{ "rx_jabbers" },
6345 	{ "rx_symbol_errors" },
6346 	{ "rx_crc_errors" },
6347 	{ "rx_align_errors" },
6348 	{ "rx_mac_ctrl_packets" },
6349 	{ "rx_pause_packets" },
6350 	{ "rx_bcast_packets" },
6351 	{ "rx_mcast_packets" },
6352 	{ "rx_ucast_packets" },
6353 	{ "rx_64_or_less_octet_packets" },
6354 	{ "rx_65_to_127_octet_packets" },
6355 	{ "rx_128_to_255_octet_packets" },
6356 	{ "rx_256_to_511_octet_packets" },
6357 	{ "rx_512_to_1023_octet_packets" },
6358 	{ "rx_1024_to_1522_octet_packets" },
6359 
6360 	{ "tx_lo_priority_octets" },
6361 	{ "tx_hi_priority_octets" },
6362 	{ "tx_late_collisions" },
6363 	{ "tx_pause_packets" },
6364 	{ "tx_bcast_packets" },
6365 	{ "tx_mcast_packets" },
6366 	{ "tx_ucast_packets" },
6367 	{ "tx_deferred" },
6368 	{ "tx_total_collisions" },
6369 	{ "tx_excessive_collisions" },
6370 	{ "tx_single_collisions" },
6371 	{ "tx_mult_collisions" },
6372 
6373 	{ "rx_discards" },
6374 	{ "tx_discards" },
6375 };
6376 
6377 /**
6378  * netdev_get_strings - get statistics identity strings
6379  * @dev:	Network device.
6380  * @stringset:	String set identifier.
6381  * @buf:	Buffer to store the strings.
6382  *
6383  * This procedure returns the strings used to identify the statistics.
6384  */
6385 static void netdev_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
6386 {
6387 	struct dev_priv *priv = netdev_priv(dev);
6388 	struct dev_info *hw_priv = priv->adapter;
6389 	struct ksz_hw *hw = &hw_priv->hw;
6390 
6391 	if (ETH_SS_STATS == stringset)
6392 		memcpy(buf, &ethtool_stats_keys,
6393 			ETH_GSTRING_LEN * hw->mib_cnt);
6394 }
6395 
6396 /**
6397  * netdev_get_sset_count - get statistics size
6398  * @dev:	Network device.
6399  * @sset:	The statistics set number.
6400  *
6401  * This function returns the size of the statistics to be reported.
6402  *
6403  * Return size of the statistics to be reported.
6404  */
6405 static int netdev_get_sset_count(struct net_device *dev, int sset)
6406 {
6407 	struct dev_priv *priv = netdev_priv(dev);
6408 	struct dev_info *hw_priv = priv->adapter;
6409 	struct ksz_hw *hw = &hw_priv->hw;
6410 
6411 	switch (sset) {
6412 	case ETH_SS_STATS:
6413 		return hw->mib_cnt;
6414 	default:
6415 		return -EOPNOTSUPP;
6416 	}
6417 }
6418 
6419 /**
6420  * netdev_get_ethtool_stats - get network device statistics
6421  * @dev:	Network device.
6422  * @stats:	Ethtool statistics data structure.
6423  * @data:	Buffer to store the statistics.
6424  *
6425  * This procedure returns the statistics.
6426  */
6427 static void netdev_get_ethtool_stats(struct net_device *dev,
6428 	struct ethtool_stats *stats, u64 *data)
6429 {
6430 	struct dev_priv *priv = netdev_priv(dev);
6431 	struct dev_info *hw_priv = priv->adapter;
6432 	struct ksz_hw *hw = &hw_priv->hw;
6433 	struct ksz_port *port = &priv->port;
6434 	int n_stats = stats->n_stats;
6435 	int i;
6436 	int n;
6437 	int p;
6438 	u64 counter[TOTAL_PORT_COUNTER_NUM];
6439 
6440 	mutex_lock(&hw_priv->lock);
6441 	n = SWITCH_PORT_NUM;
6442 	for (i = 0, p = port->first_port; i < port->mib_port_cnt; i++, p++) {
6443 		if (media_connected == hw->port_mib[p].state) {
6444 			hw_priv->counter[p].read = 1;
6445 
6446 			/* Remember first port that requests read. */
6447 			if (n == SWITCH_PORT_NUM)
6448 				n = p;
6449 		}
6450 	}
6451 	mutex_unlock(&hw_priv->lock);
6452 
6453 	if (n < SWITCH_PORT_NUM)
6454 		schedule_work(&hw_priv->mib_read);
6455 
6456 	if (1 == port->mib_port_cnt && n < SWITCH_PORT_NUM) {
6457 		p = n;
6458 		wait_event_interruptible_timeout(
6459 			hw_priv->counter[p].counter,
6460 			2 == hw_priv->counter[p].read,
6461 			HZ * 1);
6462 	} else
6463 		for (i = 0, p = n; i < port->mib_port_cnt - n; i++, p++) {
6464 			if (0 == i) {
6465 				wait_event_interruptible_timeout(
6466 					hw_priv->counter[p].counter,
6467 					2 == hw_priv->counter[p].read,
6468 					HZ * 2);
6469 			} else if (hw->port_mib[p].cnt_ptr) {
6470 				wait_event_interruptible_timeout(
6471 					hw_priv->counter[p].counter,
6472 					2 == hw_priv->counter[p].read,
6473 					HZ * 1);
6474 			}
6475 		}
6476 
6477 	get_mib_counters(hw, port->first_port, port->mib_port_cnt, counter);
6478 	n = hw->mib_cnt;
6479 	if (n > n_stats)
6480 		n = n_stats;
6481 	n_stats -= n;
6482 	for (i = 0; i < n; i++)
6483 		*data++ = counter[i];
6484 }
6485 
6486 /**
6487  * netdev_set_features - set receive checksum support
6488  * @dev:	Network device.
6489  * @features:	New device features (offloads).
6490  *
6491  * This function sets receive checksum support setting.
6492  *
6493  * Return 0 if successful; otherwise an error code.
6494  */
6495 static int netdev_set_features(struct net_device *dev,
6496 	netdev_features_t features)
6497 {
6498 	struct dev_priv *priv = netdev_priv(dev);
6499 	struct dev_info *hw_priv = priv->adapter;
6500 	struct ksz_hw *hw = &hw_priv->hw;
6501 
6502 	mutex_lock(&hw_priv->lock);
6503 
6504 	/* see note in hw_setup() */
6505 	if (features & NETIF_F_RXCSUM)
6506 		hw->rx_cfg |= DMA_RX_CSUM_TCP | DMA_RX_CSUM_IP;
6507 	else
6508 		hw->rx_cfg &= ~(DMA_RX_CSUM_TCP | DMA_RX_CSUM_IP);
6509 
6510 	if (hw->enabled)
6511 		writel(hw->rx_cfg, hw->io + KS_DMA_RX_CTRL);
6512 
6513 	mutex_unlock(&hw_priv->lock);
6514 
6515 	return 0;
6516 }
6517 
6518 static const struct ethtool_ops netdev_ethtool_ops = {
6519 	.nway_reset		= netdev_nway_reset,
6520 	.get_link		= netdev_get_link,
6521 	.get_drvinfo		= netdev_get_drvinfo,
6522 	.get_regs_len		= netdev_get_regs_len,
6523 	.get_regs		= netdev_get_regs,
6524 	.get_wol		= netdev_get_wol,
6525 	.set_wol		= netdev_set_wol,
6526 	.get_msglevel		= netdev_get_msglevel,
6527 	.set_msglevel		= netdev_set_msglevel,
6528 	.get_eeprom_len		= netdev_get_eeprom_len,
6529 	.get_eeprom		= netdev_get_eeprom,
6530 	.set_eeprom		= netdev_set_eeprom,
6531 	.get_pauseparam		= netdev_get_pauseparam,
6532 	.set_pauseparam		= netdev_set_pauseparam,
6533 	.get_ringparam		= netdev_get_ringparam,
6534 	.get_strings		= netdev_get_strings,
6535 	.get_sset_count		= netdev_get_sset_count,
6536 	.get_ethtool_stats	= netdev_get_ethtool_stats,
6537 	.get_link_ksettings	= netdev_get_link_ksettings,
6538 	.set_link_ksettings	= netdev_set_link_ksettings,
6539 };
6540 
6541 /*
6542  * Hardware monitoring
6543  */
6544 
6545 static void update_link(struct net_device *dev, struct dev_priv *priv,
6546 	struct ksz_port *port)
6547 {
6548 	if (priv->media_state != port->linked->state) {
6549 		priv->media_state = port->linked->state;
6550 		if (netif_running(dev))
6551 			set_media_state(dev, media_connected);
6552 	}
6553 }
6554 
6555 static void mib_read_work(struct work_struct *work)
6556 {
6557 	struct dev_info *hw_priv =
6558 		container_of(work, struct dev_info, mib_read);
6559 	struct ksz_hw *hw = &hw_priv->hw;
6560 	unsigned long next_jiffies;
6561 	struct ksz_port_mib *mib;
6562 	int i;
6563 
6564 	next_jiffies = jiffies;
6565 	for (i = 0; i < hw->mib_port_cnt; i++) {
6566 		mib = &hw->port_mib[i];
6567 
6568 		/* Reading MIB counters or requested to read. */
6569 		if (mib->cnt_ptr || 1 == hw_priv->counter[i].read) {
6570 
6571 			/* Need to process receive interrupt. */
6572 			if (port_r_cnt(hw, i))
6573 				break;
6574 			hw_priv->counter[i].read = 0;
6575 
6576 			/* Finish reading counters. */
6577 			if (0 == mib->cnt_ptr) {
6578 				hw_priv->counter[i].read = 2;
6579 				wake_up_interruptible(
6580 					&hw_priv->counter[i].counter);
6581 			}
6582 		} else if (time_after_eq(jiffies, hw_priv->counter[i].time)) {
6583 			/* Only read MIB counters when the port is connected. */
6584 			if (media_connected == mib->state)
6585 				hw_priv->counter[i].read = 1;
6586 			next_jiffies += HZ * 1 * hw->mib_port_cnt;
6587 			hw_priv->counter[i].time = next_jiffies;
6588 
6589 		/* Port is just disconnected. */
6590 		} else if (mib->link_down) {
6591 			mib->link_down = 0;
6592 
6593 			/* Read counters one last time after link is lost. */
6594 			hw_priv->counter[i].read = 1;
6595 		}
6596 	}
6597 }
6598 
6599 static void mib_monitor(struct timer_list *t)
6600 {
6601 	struct dev_info *hw_priv = from_timer(hw_priv, t, mib_timer_info.timer);
6602 
6603 	mib_read_work(&hw_priv->mib_read);
6604 
6605 	/* This is used to verify Wake-on-LAN is working. */
6606 	if (hw_priv->pme_wait) {
6607 		if (time_is_before_eq_jiffies(hw_priv->pme_wait)) {
6608 			hw_clr_wol_pme_status(&hw_priv->hw);
6609 			hw_priv->pme_wait = 0;
6610 		}
6611 	} else if (hw_chk_wol_pme_status(&hw_priv->hw)) {
6612 
6613 		/* PME is asserted.  Wait 2 seconds to clear it. */
6614 		hw_priv->pme_wait = jiffies + HZ * 2;
6615 	}
6616 
6617 	ksz_update_timer(&hw_priv->mib_timer_info);
6618 }
6619 
6620 /**
6621  * dev_monitor - periodic monitoring
6622  * @t:	timer list containing a network device pointer.
6623  *
6624  * This routine is run in a kernel timer to monitor the network device.
6625  */
6626 static void dev_monitor(struct timer_list *t)
6627 {
6628 	struct dev_priv *priv = from_timer(priv, t, monitor_timer_info.timer);
6629 	struct net_device *dev = priv->mii_if.dev;
6630 	struct dev_info *hw_priv = priv->adapter;
6631 	struct ksz_hw *hw = &hw_priv->hw;
6632 	struct ksz_port *port = &priv->port;
6633 
6634 	if (!(hw->features & LINK_INT_WORKING))
6635 		port_get_link_speed(port);
6636 	update_link(dev, priv, port);
6637 
6638 	ksz_update_timer(&priv->monitor_timer_info);
6639 }
6640 
6641 /*
6642  * Linux network device interface functions
6643  */
6644 
6645 /* Driver exported variables */
6646 
6647 static int msg_enable;
6648 
6649 static char *macaddr = ":";
6650 static char *mac1addr = ":";
6651 
6652 /*
6653  * This enables multiple network device mode for KSZ8842, which contains a
6654  * switch with two physical ports.  Some users like to take control of the
6655  * ports for running Spanning Tree Protocol.  The driver will create an
6656  * additional eth? device for the other port.
6657  *
6658  * Some limitations are the network devices cannot have different MTU and
6659  * multicast hash tables.
6660  */
6661 static int multi_dev;
6662 
6663 /*
6664  * As most users select multiple network device mode to use Spanning Tree
6665  * Protocol, this enables a feature in which most unicast and multicast packets
6666  * are forwarded inside the switch and not passed to the host.  Only packets
6667  * that need the host's attention are passed to it.  This prevents the host
6668  * wasting CPU time to examine each and every incoming packets and do the
6669  * forwarding itself.
6670  *
6671  * As the hack requires the private bridge header, the driver cannot compile
6672  * with just the kernel headers.
6673  *
6674  * Enabling STP support also turns on multiple network device mode.
6675  */
6676 static int stp;
6677 
6678 /*
6679  * This enables fast aging in the KSZ8842 switch.  Not sure what situation
6680  * needs that.  However, fast aging is used to flush the dynamic MAC table when
6681  * STP support is enabled.
6682  */
6683 static int fast_aging;
6684 
6685 /**
6686  * netdev_init - initialize network device.
6687  * @dev:	Network device.
6688  *
6689  * This function initializes the network device.
6690  *
6691  * Return 0 if successful; otherwise an error code indicating failure.
6692  */
6693 static int __init netdev_init(struct net_device *dev)
6694 {
6695 	struct dev_priv *priv = netdev_priv(dev);
6696 
6697 	/* 500 ms timeout */
6698 	ksz_init_timer(&priv->monitor_timer_info, 500 * HZ / 1000,
6699 		dev_monitor);
6700 
6701 	/* 500 ms timeout */
6702 	dev->watchdog_timeo = HZ / 2;
6703 
6704 	dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_RXCSUM;
6705 
6706 	/*
6707 	 * Hardware does not really support IPv6 checksum generation, but
6708 	 * driver actually runs faster with this on.
6709 	 */
6710 	dev->hw_features |= NETIF_F_IPV6_CSUM;
6711 
6712 	dev->features |= dev->hw_features;
6713 
6714 	sema_init(&priv->proc_sem, 1);
6715 
6716 	priv->mii_if.phy_id_mask = 0x1;
6717 	priv->mii_if.reg_num_mask = 0x7;
6718 	priv->mii_if.dev = dev;
6719 	priv->mii_if.mdio_read = mdio_read;
6720 	priv->mii_if.mdio_write = mdio_write;
6721 	priv->mii_if.phy_id = priv->port.first_port + 1;
6722 
6723 	priv->msg_enable = netif_msg_init(msg_enable,
6724 		(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK));
6725 
6726 	return 0;
6727 }
6728 
6729 static const struct net_device_ops netdev_ops = {
6730 	.ndo_init		= netdev_init,
6731 	.ndo_open		= netdev_open,
6732 	.ndo_stop		= netdev_close,
6733 	.ndo_get_stats		= netdev_query_statistics,
6734 	.ndo_start_xmit		= netdev_tx,
6735 	.ndo_tx_timeout		= netdev_tx_timeout,
6736 	.ndo_change_mtu		= netdev_change_mtu,
6737 	.ndo_set_features	= netdev_set_features,
6738 	.ndo_set_mac_address	= netdev_set_mac_address,
6739 	.ndo_validate_addr	= eth_validate_addr,
6740 	.ndo_eth_ioctl		= netdev_ioctl,
6741 	.ndo_set_rx_mode	= netdev_set_rx_mode,
6742 #ifdef CONFIG_NET_POLL_CONTROLLER
6743 	.ndo_poll_controller	= netdev_netpoll,
6744 #endif
6745 };
6746 
6747 static void netdev_free(struct net_device *dev)
6748 {
6749 	if (dev->watchdog_timeo)
6750 		unregister_netdev(dev);
6751 
6752 	free_netdev(dev);
6753 }
6754 
6755 struct platform_info {
6756 	struct dev_info dev_info;
6757 	struct net_device *netdev[SWITCH_PORT_NUM];
6758 };
6759 
6760 static int net_device_present;
6761 
6762 static void get_mac_addr(struct dev_info *hw_priv, u8 *macaddr, int port)
6763 {
6764 	int i;
6765 	int j;
6766 	int got_num;
6767 	int num;
6768 
6769 	i = j = num = got_num = 0;
6770 	while (j < ETH_ALEN) {
6771 		if (macaddr[i]) {
6772 			int digit;
6773 
6774 			got_num = 1;
6775 			digit = hex_to_bin(macaddr[i]);
6776 			if (digit >= 0)
6777 				num = num * 16 + digit;
6778 			else if (':' == macaddr[i])
6779 				got_num = 2;
6780 			else
6781 				break;
6782 		} else if (got_num)
6783 			got_num = 2;
6784 		else
6785 			break;
6786 		if (2 == got_num) {
6787 			if (MAIN_PORT == port) {
6788 				hw_priv->hw.override_addr[j++] = (u8) num;
6789 				hw_priv->hw.override_addr[5] +=
6790 					hw_priv->hw.id;
6791 			} else {
6792 				hw_priv->hw.ksz_switch->other_addr[j++] =
6793 					(u8) num;
6794 				hw_priv->hw.ksz_switch->other_addr[5] +=
6795 					hw_priv->hw.id;
6796 			}
6797 			num = got_num = 0;
6798 		}
6799 		i++;
6800 	}
6801 	if (ETH_ALEN == j) {
6802 		if (MAIN_PORT == port)
6803 			hw_priv->hw.mac_override = 1;
6804 	}
6805 }
6806 
6807 #define KS884X_DMA_MASK			(~0x0UL)
6808 
6809 static void read_other_addr(struct ksz_hw *hw)
6810 {
6811 	int i;
6812 	u16 data[3];
6813 	struct ksz_switch *sw = hw->ksz_switch;
6814 
6815 	for (i = 0; i < 3; i++)
6816 		data[i] = eeprom_read(hw, i + EEPROM_DATA_OTHER_MAC_ADDR);
6817 	if ((data[0] || data[1] || data[2]) && data[0] != 0xffff) {
6818 		sw->other_addr[5] = (u8) data[0];
6819 		sw->other_addr[4] = (u8)(data[0] >> 8);
6820 		sw->other_addr[3] = (u8) data[1];
6821 		sw->other_addr[2] = (u8)(data[1] >> 8);
6822 		sw->other_addr[1] = (u8) data[2];
6823 		sw->other_addr[0] = (u8)(data[2] >> 8);
6824 	}
6825 }
6826 
6827 #ifndef PCI_VENDOR_ID_MICREL_KS
6828 #define PCI_VENDOR_ID_MICREL_KS		0x16c6
6829 #endif
6830 
6831 static int pcidev_init(struct pci_dev *pdev, const struct pci_device_id *id)
6832 {
6833 	struct net_device *dev;
6834 	struct dev_priv *priv;
6835 	struct dev_info *hw_priv;
6836 	struct ksz_hw *hw;
6837 	struct platform_info *info;
6838 	struct ksz_port *port;
6839 	unsigned long reg_base;
6840 	unsigned long reg_len;
6841 	int cnt;
6842 	int i;
6843 	int mib_port_count;
6844 	int pi;
6845 	int port_count;
6846 	int result;
6847 	char banner[sizeof(version)];
6848 	struct ksz_switch *sw = NULL;
6849 
6850 	result = pcim_enable_device(pdev);
6851 	if (result)
6852 		return result;
6853 
6854 	result = -ENODEV;
6855 
6856 	if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)) ||
6857 	    dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)))
6858 		return result;
6859 
6860 	reg_base = pci_resource_start(pdev, 0);
6861 	reg_len = pci_resource_len(pdev, 0);
6862 	if ((pci_resource_flags(pdev, 0) & IORESOURCE_IO) != 0)
6863 		return result;
6864 
6865 	if (!request_mem_region(reg_base, reg_len, DRV_NAME))
6866 		return result;
6867 	pci_set_master(pdev);
6868 
6869 	result = -ENOMEM;
6870 
6871 	info = kzalloc(sizeof(struct platform_info), GFP_KERNEL);
6872 	if (!info)
6873 		goto pcidev_init_dev_err;
6874 
6875 	hw_priv = &info->dev_info;
6876 	hw_priv->pdev = pdev;
6877 
6878 	hw = &hw_priv->hw;
6879 
6880 	hw->io = ioremap(reg_base, reg_len);
6881 	if (!hw->io)
6882 		goto pcidev_init_io_err;
6883 
6884 	cnt = hw_init(hw);
6885 	if (!cnt) {
6886 		if (msg_enable & NETIF_MSG_PROBE)
6887 			pr_alert("chip not detected\n");
6888 		result = -ENODEV;
6889 		goto pcidev_init_alloc_err;
6890 	}
6891 
6892 	snprintf(banner, sizeof(banner), "%s", version);
6893 	banner[13] = cnt + '0';		/* Replace x in "Micrel KSZ884x" */
6894 	dev_info(&hw_priv->pdev->dev, "%s\n", banner);
6895 	dev_dbg(&hw_priv->pdev->dev, "Mem = %p; IRQ = %d\n", hw->io, pdev->irq);
6896 
6897 	/* Assume device is KSZ8841. */
6898 	hw->dev_count = 1;
6899 	port_count = 1;
6900 	mib_port_count = 1;
6901 	hw->addr_list_size = 0;
6902 	hw->mib_cnt = PORT_COUNTER_NUM;
6903 	hw->mib_port_cnt = 1;
6904 
6905 	/* KSZ8842 has a switch with multiple ports. */
6906 	if (2 == cnt) {
6907 		if (fast_aging)
6908 			hw->overrides |= FAST_AGING;
6909 
6910 		hw->mib_cnt = TOTAL_PORT_COUNTER_NUM;
6911 
6912 		/* Multiple network device interfaces are required. */
6913 		if (multi_dev) {
6914 			hw->dev_count = SWITCH_PORT_NUM;
6915 			hw->addr_list_size = SWITCH_PORT_NUM - 1;
6916 		}
6917 
6918 		/* Single network device has multiple ports. */
6919 		if (1 == hw->dev_count) {
6920 			port_count = SWITCH_PORT_NUM;
6921 			mib_port_count = SWITCH_PORT_NUM;
6922 		}
6923 		hw->mib_port_cnt = TOTAL_PORT_NUM;
6924 		hw->ksz_switch = kzalloc(sizeof(struct ksz_switch), GFP_KERNEL);
6925 		if (!hw->ksz_switch)
6926 			goto pcidev_init_alloc_err;
6927 
6928 		sw = hw->ksz_switch;
6929 	}
6930 	for (i = 0; i < hw->mib_port_cnt; i++)
6931 		hw->port_mib[i].mib_start = 0;
6932 
6933 	hw->parent = hw_priv;
6934 
6935 	/* Default MTU is 1500. */
6936 	hw_priv->mtu = (REGULAR_RX_BUF_SIZE + 3) & ~3;
6937 
6938 	if (ksz_alloc_mem(hw_priv))
6939 		goto pcidev_init_mem_err;
6940 
6941 	hw_priv->hw.id = net_device_present;
6942 
6943 	spin_lock_init(&hw_priv->hwlock);
6944 	mutex_init(&hw_priv->lock);
6945 
6946 	for (i = 0; i < TOTAL_PORT_NUM; i++)
6947 		init_waitqueue_head(&hw_priv->counter[i].counter);
6948 
6949 	if (macaddr[0] != ':')
6950 		get_mac_addr(hw_priv, macaddr, MAIN_PORT);
6951 
6952 	/* Read MAC address and initialize override address if not overridden. */
6953 	hw_read_addr(hw);
6954 
6955 	/* Multiple device interfaces mode requires a second MAC address. */
6956 	if (hw->dev_count > 1) {
6957 		memcpy(sw->other_addr, hw->override_addr, ETH_ALEN);
6958 		read_other_addr(hw);
6959 		if (mac1addr[0] != ':')
6960 			get_mac_addr(hw_priv, mac1addr, OTHER_PORT);
6961 	}
6962 
6963 	hw_setup(hw);
6964 	if (hw->ksz_switch)
6965 		sw_setup(hw);
6966 	else {
6967 		hw_priv->wol_support = WOL_SUPPORT;
6968 		hw_priv->wol_enable = 0;
6969 	}
6970 
6971 	INIT_WORK(&hw_priv->mib_read, mib_read_work);
6972 
6973 	/* 500 ms timeout */
6974 	ksz_init_timer(&hw_priv->mib_timer_info, 500 * HZ / 1000,
6975 		mib_monitor);
6976 
6977 	for (i = 0; i < hw->dev_count; i++) {
6978 		dev = alloc_etherdev(sizeof(struct dev_priv));
6979 		if (!dev)
6980 			goto pcidev_init_reg_err;
6981 		SET_NETDEV_DEV(dev, &pdev->dev);
6982 		info->netdev[i] = dev;
6983 
6984 		priv = netdev_priv(dev);
6985 		priv->adapter = hw_priv;
6986 		priv->id = net_device_present++;
6987 
6988 		port = &priv->port;
6989 		port->port_cnt = port_count;
6990 		port->mib_port_cnt = mib_port_count;
6991 		port->first_port = i;
6992 		port->flow_ctrl = PHY_FLOW_CTRL;
6993 
6994 		port->hw = hw;
6995 		port->linked = &hw->port_info[port->first_port];
6996 
6997 		for (cnt = 0, pi = i; cnt < port_count; cnt++, pi++) {
6998 			hw->port_info[pi].port_id = pi;
6999 			hw->port_info[pi].pdev = dev;
7000 			hw->port_info[pi].state = media_disconnected;
7001 		}
7002 
7003 		dev->mem_start = (unsigned long) hw->io;
7004 		dev->mem_end = dev->mem_start + reg_len - 1;
7005 		dev->irq = pdev->irq;
7006 		if (MAIN_PORT == i)
7007 			eth_hw_addr_set(dev, hw_priv->hw.override_addr);
7008 		else {
7009 			u8 addr[ETH_ALEN];
7010 
7011 			ether_addr_copy(addr, sw->other_addr);
7012 			if (ether_addr_equal(sw->other_addr, hw->override_addr))
7013 				addr[5] += port->first_port;
7014 			eth_hw_addr_set(dev, addr);
7015 		}
7016 
7017 		dev->netdev_ops = &netdev_ops;
7018 		dev->ethtool_ops = &netdev_ethtool_ops;
7019 
7020 		/* MTU range: 60 - 1894 */
7021 		dev->min_mtu = ETH_ZLEN;
7022 		dev->max_mtu = MAX_RX_BUF_SIZE -
7023 			       (ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
7024 
7025 		if (register_netdev(dev))
7026 			goto pcidev_init_reg_err;
7027 		port_set_power_saving(port, true);
7028 	}
7029 
7030 	pci_dev_get(hw_priv->pdev);
7031 	pci_set_drvdata(pdev, info);
7032 	return 0;
7033 
7034 pcidev_init_reg_err:
7035 	for (i = 0; i < hw->dev_count; i++) {
7036 		if (info->netdev[i]) {
7037 			netdev_free(info->netdev[i]);
7038 			info->netdev[i] = NULL;
7039 		}
7040 	}
7041 
7042 pcidev_init_mem_err:
7043 	ksz_free_mem(hw_priv);
7044 	kfree(hw->ksz_switch);
7045 
7046 pcidev_init_alloc_err:
7047 	iounmap(hw->io);
7048 
7049 pcidev_init_io_err:
7050 	kfree(info);
7051 
7052 pcidev_init_dev_err:
7053 	release_mem_region(reg_base, reg_len);
7054 
7055 	return result;
7056 }
7057 
7058 static void pcidev_exit(struct pci_dev *pdev)
7059 {
7060 	int i;
7061 	struct platform_info *info = pci_get_drvdata(pdev);
7062 	struct dev_info *hw_priv = &info->dev_info;
7063 
7064 	release_mem_region(pci_resource_start(pdev, 0),
7065 		pci_resource_len(pdev, 0));
7066 	for (i = 0; i < hw_priv->hw.dev_count; i++) {
7067 		if (info->netdev[i])
7068 			netdev_free(info->netdev[i]);
7069 	}
7070 	if (hw_priv->hw.io)
7071 		iounmap(hw_priv->hw.io);
7072 	ksz_free_mem(hw_priv);
7073 	kfree(hw_priv->hw.ksz_switch);
7074 	pci_dev_put(hw_priv->pdev);
7075 	kfree(info);
7076 }
7077 
7078 static int __maybe_unused pcidev_resume(struct device *dev_d)
7079 {
7080 	int i;
7081 	struct platform_info *info = dev_get_drvdata(dev_d);
7082 	struct dev_info *hw_priv = &info->dev_info;
7083 	struct ksz_hw *hw = &hw_priv->hw;
7084 
7085 	device_wakeup_disable(dev_d);
7086 
7087 	if (hw_priv->wol_enable)
7088 		hw_cfg_wol_pme(hw, 0);
7089 	for (i = 0; i < hw->dev_count; i++) {
7090 		if (info->netdev[i]) {
7091 			struct net_device *dev = info->netdev[i];
7092 
7093 			if (netif_running(dev)) {
7094 				netdev_open(dev);
7095 				netif_device_attach(dev);
7096 			}
7097 		}
7098 	}
7099 	return 0;
7100 }
7101 
7102 static int __maybe_unused pcidev_suspend(struct device *dev_d)
7103 {
7104 	int i;
7105 	struct platform_info *info = dev_get_drvdata(dev_d);
7106 	struct dev_info *hw_priv = &info->dev_info;
7107 	struct ksz_hw *hw = &hw_priv->hw;
7108 
7109 	/* Need to find a way to retrieve the device IP address. */
7110 	static const u8 net_addr[] = { 192, 168, 1, 1 };
7111 
7112 	for (i = 0; i < hw->dev_count; i++) {
7113 		if (info->netdev[i]) {
7114 			struct net_device *dev = info->netdev[i];
7115 
7116 			if (netif_running(dev)) {
7117 				netif_device_detach(dev);
7118 				netdev_close(dev);
7119 			}
7120 		}
7121 	}
7122 	if (hw_priv->wol_enable) {
7123 		hw_enable_wol(hw, hw_priv->wol_enable, net_addr);
7124 		hw_cfg_wol_pme(hw, 1);
7125 	}
7126 
7127 	device_wakeup_enable(dev_d);
7128 	return 0;
7129 }
7130 
7131 static char pcidev_name[] = "ksz884xp";
7132 
7133 static const struct pci_device_id pcidev_table[] = {
7134 	{ PCI_VENDOR_ID_MICREL_KS, 0x8841,
7135 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
7136 	{ PCI_VENDOR_ID_MICREL_KS, 0x8842,
7137 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
7138 	{ 0 }
7139 };
7140 
7141 MODULE_DEVICE_TABLE(pci, pcidev_table);
7142 
7143 static SIMPLE_DEV_PM_OPS(pcidev_pm_ops, pcidev_suspend, pcidev_resume);
7144 
7145 static struct pci_driver pci_device_driver = {
7146 	.driver.pm	= &pcidev_pm_ops,
7147 	.name		= pcidev_name,
7148 	.id_table	= pcidev_table,
7149 	.probe		= pcidev_init,
7150 	.remove		= pcidev_exit
7151 };
7152 
7153 module_pci_driver(pci_device_driver);
7154 
7155 MODULE_DESCRIPTION("KSZ8841/2 PCI network driver");
7156 MODULE_AUTHOR("Tristram Ha <Tristram.Ha@micrel.com>");
7157 MODULE_LICENSE("GPL");
7158 
7159 module_param_named(message, msg_enable, int, 0);
7160 MODULE_PARM_DESC(message, "Message verbosity level (0=none, 31=all)");
7161 
7162 module_param(macaddr, charp, 0);
7163 module_param(mac1addr, charp, 0);
7164 module_param(fast_aging, int, 0);
7165 module_param(multi_dev, int, 0);
7166 module_param(stp, int, 0);
7167 MODULE_PARM_DESC(macaddr, "MAC address");
7168 MODULE_PARM_DESC(mac1addr, "Second MAC address");
7169 MODULE_PARM_DESC(fast_aging, "Fast aging");
7170 MODULE_PARM_DESC(multi_dev, "Multiple device interfaces");
7171 MODULE_PARM_DESC(stp, "STP support");
7172