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(©_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 *)©_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, ðtool_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