1 /****************************************************************************** 2 3 Copyright (c) 2001-2012, Intel Corporation 4 All rights reserved. 5 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are met: 8 9 1. Redistributions of source code must retain the above copyright notice, 10 this list of conditions and the following disclaimer. 11 12 2. Redistributions in binary form must reproduce the above copyright 13 notice, this list of conditions and the following disclaimer in the 14 documentation and/or other materials provided with the distribution. 15 16 3. Neither the name of the Intel Corporation nor the names of its 17 contributors may be used to endorse or promote products derived from 18 this software without specific prior written permission. 19 20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 POSSIBILITY OF SUCH DAMAGE. 31 32 ******************************************************************************/ 33 /*$FreeBSD$*/ 34 35 #include "e1000_api.h" 36 37 static s32 e1000_validate_mdi_setting_generic(struct e1000_hw *hw); 38 static void e1000_set_lan_id_multi_port_pcie(struct e1000_hw *hw); 39 static void e1000_config_collision_dist_generic(struct e1000_hw *hw); 40 static void e1000_rar_set_generic(struct e1000_hw *hw, u8 *addr, u32 index); 41 42 /** 43 * e1000_init_mac_ops_generic - Initialize MAC function pointers 44 * @hw: pointer to the HW structure 45 * 46 * Setups up the function pointers to no-op functions 47 **/ 48 void e1000_init_mac_ops_generic(struct e1000_hw *hw) 49 { 50 struct e1000_mac_info *mac = &hw->mac; 51 DEBUGFUNC("e1000_init_mac_ops_generic"); 52 53 /* General Setup */ 54 mac->ops.init_params = e1000_null_ops_generic; 55 mac->ops.init_hw = e1000_null_ops_generic; 56 mac->ops.reset_hw = e1000_null_ops_generic; 57 mac->ops.setup_physical_interface = e1000_null_ops_generic; 58 mac->ops.get_bus_info = e1000_null_ops_generic; 59 mac->ops.set_lan_id = e1000_set_lan_id_multi_port_pcie; 60 mac->ops.read_mac_addr = e1000_read_mac_addr_generic; 61 mac->ops.config_collision_dist = e1000_config_collision_dist_generic; 62 mac->ops.clear_hw_cntrs = e1000_null_mac_generic; 63 /* LED */ 64 mac->ops.cleanup_led = e1000_null_ops_generic; 65 mac->ops.setup_led = e1000_null_ops_generic; 66 mac->ops.blink_led = e1000_null_ops_generic; 67 mac->ops.led_on = e1000_null_ops_generic; 68 mac->ops.led_off = e1000_null_ops_generic; 69 /* LINK */ 70 mac->ops.setup_link = e1000_null_ops_generic; 71 mac->ops.get_link_up_info = e1000_null_link_info; 72 mac->ops.check_for_link = e1000_null_ops_generic; 73 mac->ops.wait_autoneg = e1000_wait_autoneg_generic; 74 /* Management */ 75 mac->ops.check_mng_mode = e1000_null_mng_mode; 76 mac->ops.mng_host_if_write = e1000_mng_host_if_write_generic; 77 mac->ops.mng_write_cmd_header = e1000_mng_write_cmd_header_generic; 78 mac->ops.mng_enable_host_if = e1000_mng_enable_host_if_generic; 79 /* VLAN, MC, etc. */ 80 mac->ops.update_mc_addr_list = e1000_null_update_mc; 81 mac->ops.clear_vfta = e1000_null_mac_generic; 82 mac->ops.write_vfta = e1000_null_write_vfta; 83 mac->ops.rar_set = e1000_rar_set_generic; 84 mac->ops.validate_mdi_setting = e1000_validate_mdi_setting_generic; 85 } 86 87 /** 88 * e1000_null_ops_generic - No-op function, returns 0 89 * @hw: pointer to the HW structure 90 **/ 91 s32 e1000_null_ops_generic(struct e1000_hw *hw) 92 { 93 DEBUGFUNC("e1000_null_ops_generic"); 94 return E1000_SUCCESS; 95 } 96 97 /** 98 * e1000_null_mac_generic - No-op function, return void 99 * @hw: pointer to the HW structure 100 **/ 101 void e1000_null_mac_generic(struct e1000_hw *hw) 102 { 103 DEBUGFUNC("e1000_null_mac_generic"); 104 return; 105 } 106 107 /** 108 * e1000_null_link_info - No-op function, return 0 109 * @hw: pointer to the HW structure 110 **/ 111 s32 e1000_null_link_info(struct e1000_hw *hw, u16 *s, u16 *d) 112 { 113 DEBUGFUNC("e1000_null_link_info"); 114 return E1000_SUCCESS; 115 } 116 117 /** 118 * e1000_null_mng_mode - No-op function, return FALSE 119 * @hw: pointer to the HW structure 120 **/ 121 bool e1000_null_mng_mode(struct e1000_hw *hw) 122 { 123 DEBUGFUNC("e1000_null_mng_mode"); 124 return FALSE; 125 } 126 127 /** 128 * e1000_null_update_mc - No-op function, return void 129 * @hw: pointer to the HW structure 130 **/ 131 void e1000_null_update_mc(struct e1000_hw *hw, u8 *h, u32 a) 132 { 133 DEBUGFUNC("e1000_null_update_mc"); 134 return; 135 } 136 137 /** 138 * e1000_null_write_vfta - No-op function, return void 139 * @hw: pointer to the HW structure 140 **/ 141 void e1000_null_write_vfta(struct e1000_hw *hw, u32 a, u32 b) 142 { 143 DEBUGFUNC("e1000_null_write_vfta"); 144 return; 145 } 146 147 /** 148 * e1000_null_rar_set - No-op function, return void 149 * @hw: pointer to the HW structure 150 **/ 151 void e1000_null_rar_set(struct e1000_hw *hw, u8 *h, u32 a) 152 { 153 DEBUGFUNC("e1000_null_rar_set"); 154 return; 155 } 156 157 /** 158 * e1000_get_bus_info_pci_generic - Get PCI(x) bus information 159 * @hw: pointer to the HW structure 160 * 161 * Determines and stores the system bus information for a particular 162 * network interface. The following bus information is determined and stored: 163 * bus speed, bus width, type (PCI/PCIx), and PCI(-x) function. 164 **/ 165 s32 e1000_get_bus_info_pci_generic(struct e1000_hw *hw) 166 { 167 struct e1000_mac_info *mac = &hw->mac; 168 struct e1000_bus_info *bus = &hw->bus; 169 u32 status = E1000_READ_REG(hw, E1000_STATUS); 170 s32 ret_val = E1000_SUCCESS; 171 172 DEBUGFUNC("e1000_get_bus_info_pci_generic"); 173 174 /* PCI or PCI-X? */ 175 bus->type = (status & E1000_STATUS_PCIX_MODE) 176 ? e1000_bus_type_pcix 177 : e1000_bus_type_pci; 178 179 /* Bus speed */ 180 if (bus->type == e1000_bus_type_pci) { 181 bus->speed = (status & E1000_STATUS_PCI66) 182 ? e1000_bus_speed_66 183 : e1000_bus_speed_33; 184 } else { 185 switch (status & E1000_STATUS_PCIX_SPEED) { 186 case E1000_STATUS_PCIX_SPEED_66: 187 bus->speed = e1000_bus_speed_66; 188 break; 189 case E1000_STATUS_PCIX_SPEED_100: 190 bus->speed = e1000_bus_speed_100; 191 break; 192 case E1000_STATUS_PCIX_SPEED_133: 193 bus->speed = e1000_bus_speed_133; 194 break; 195 default: 196 bus->speed = e1000_bus_speed_reserved; 197 break; 198 } 199 } 200 201 /* Bus width */ 202 bus->width = (status & E1000_STATUS_BUS64) 203 ? e1000_bus_width_64 204 : e1000_bus_width_32; 205 206 /* Which PCI(-X) function? */ 207 mac->ops.set_lan_id(hw); 208 209 return ret_val; 210 } 211 212 /** 213 * e1000_get_bus_info_pcie_generic - Get PCIe bus information 214 * @hw: pointer to the HW structure 215 * 216 * Determines and stores the system bus information for a particular 217 * network interface. The following bus information is determined and stored: 218 * bus speed, bus width, type (PCIe), and PCIe function. 219 **/ 220 s32 e1000_get_bus_info_pcie_generic(struct e1000_hw *hw) 221 { 222 struct e1000_mac_info *mac = &hw->mac; 223 struct e1000_bus_info *bus = &hw->bus; 224 s32 ret_val; 225 u16 pcie_link_status; 226 227 DEBUGFUNC("e1000_get_bus_info_pcie_generic"); 228 229 bus->type = e1000_bus_type_pci_express; 230 231 ret_val = e1000_read_pcie_cap_reg(hw, PCIE_LINK_STATUS, 232 &pcie_link_status); 233 if (ret_val) { 234 bus->width = e1000_bus_width_unknown; 235 bus->speed = e1000_bus_speed_unknown; 236 } else { 237 switch (pcie_link_status & PCIE_LINK_SPEED_MASK) { 238 case PCIE_LINK_SPEED_2500: 239 bus->speed = e1000_bus_speed_2500; 240 break; 241 case PCIE_LINK_SPEED_5000: 242 bus->speed = e1000_bus_speed_5000; 243 break; 244 default: 245 bus->speed = e1000_bus_speed_unknown; 246 break; 247 } 248 249 bus->width = (enum e1000_bus_width)((pcie_link_status & 250 PCIE_LINK_WIDTH_MASK) >> PCIE_LINK_WIDTH_SHIFT); 251 } 252 253 mac->ops.set_lan_id(hw); 254 255 return E1000_SUCCESS; 256 } 257 258 /** 259 * e1000_set_lan_id_multi_port_pcie - Set LAN id for PCIe multiple port devices 260 * 261 * @hw: pointer to the HW structure 262 * 263 * Determines the LAN function id by reading memory-mapped registers 264 * and swaps the port value if requested. 265 **/ 266 static void e1000_set_lan_id_multi_port_pcie(struct e1000_hw *hw) 267 { 268 struct e1000_bus_info *bus = &hw->bus; 269 u32 reg; 270 271 /* 272 * The status register reports the correct function number 273 * for the device regardless of function swap state. 274 */ 275 reg = E1000_READ_REG(hw, E1000_STATUS); 276 bus->func = (reg & E1000_STATUS_FUNC_MASK) >> E1000_STATUS_FUNC_SHIFT; 277 } 278 279 /** 280 * e1000_set_lan_id_multi_port_pci - Set LAN id for PCI multiple port devices 281 * @hw: pointer to the HW structure 282 * 283 * Determines the LAN function id by reading PCI config space. 284 **/ 285 void e1000_set_lan_id_multi_port_pci(struct e1000_hw *hw) 286 { 287 struct e1000_bus_info *bus = &hw->bus; 288 u16 pci_header_type; 289 u32 status; 290 291 e1000_read_pci_cfg(hw, PCI_HEADER_TYPE_REGISTER, &pci_header_type); 292 if (pci_header_type & PCI_HEADER_TYPE_MULTIFUNC) { 293 status = E1000_READ_REG(hw, E1000_STATUS); 294 bus->func = (status & E1000_STATUS_FUNC_MASK) 295 >> E1000_STATUS_FUNC_SHIFT; 296 } else { 297 bus->func = 0; 298 } 299 } 300 301 /** 302 * e1000_set_lan_id_single_port - Set LAN id for a single port device 303 * @hw: pointer to the HW structure 304 * 305 * Sets the LAN function id to zero for a single port device. 306 **/ 307 void e1000_set_lan_id_single_port(struct e1000_hw *hw) 308 { 309 struct e1000_bus_info *bus = &hw->bus; 310 311 bus->func = 0; 312 } 313 314 /** 315 * e1000_clear_vfta_generic - Clear VLAN filter table 316 * @hw: pointer to the HW structure 317 * 318 * Clears the register array which contains the VLAN filter table by 319 * setting all the values to 0. 320 **/ 321 void e1000_clear_vfta_generic(struct e1000_hw *hw) 322 { 323 u32 offset; 324 325 DEBUGFUNC("e1000_clear_vfta_generic"); 326 327 for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) { 328 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, 0); 329 E1000_WRITE_FLUSH(hw); 330 } 331 } 332 333 /** 334 * e1000_write_vfta_generic - Write value to VLAN filter table 335 * @hw: pointer to the HW structure 336 * @offset: register offset in VLAN filter table 337 * @value: register value written to VLAN filter table 338 * 339 * Writes value at the given offset in the register array which stores 340 * the VLAN filter table. 341 **/ 342 void e1000_write_vfta_generic(struct e1000_hw *hw, u32 offset, u32 value) 343 { 344 DEBUGFUNC("e1000_write_vfta_generic"); 345 346 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, value); 347 E1000_WRITE_FLUSH(hw); 348 } 349 350 /** 351 * e1000_init_rx_addrs_generic - Initialize receive address's 352 * @hw: pointer to the HW structure 353 * @rar_count: receive address registers 354 * 355 * Setup the receive address registers by setting the base receive address 356 * register to the devices MAC address and clearing all the other receive 357 * address registers to 0. 358 **/ 359 void e1000_init_rx_addrs_generic(struct e1000_hw *hw, u16 rar_count) 360 { 361 u32 i; 362 u8 mac_addr[ETH_ADDR_LEN] = {0}; 363 364 DEBUGFUNC("e1000_init_rx_addrs_generic"); 365 366 /* Setup the receive address */ 367 DEBUGOUT("Programming MAC Address into RAR[0]\n"); 368 369 hw->mac.ops.rar_set(hw, hw->mac.addr, 0); 370 371 /* Zero out the other (rar_entry_count - 1) receive addresses */ 372 DEBUGOUT1("Clearing RAR[1-%u]\n", rar_count-1); 373 for (i = 1; i < rar_count; i++) 374 hw->mac.ops.rar_set(hw, mac_addr, i); 375 } 376 377 /** 378 * e1000_check_alt_mac_addr_generic - Check for alternate MAC addr 379 * @hw: pointer to the HW structure 380 * 381 * Checks the nvm for an alternate MAC address. An alternate MAC address 382 * can be setup by pre-boot software and must be treated like a permanent 383 * address and must override the actual permanent MAC address. If an 384 * alternate MAC address is found it is programmed into RAR0, replacing 385 * the permanent address that was installed into RAR0 by the Si on reset. 386 * This function will return SUCCESS unless it encounters an error while 387 * reading the EEPROM. 388 **/ 389 s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw) 390 { 391 u32 i; 392 s32 ret_val = E1000_SUCCESS; 393 u16 offset, nvm_alt_mac_addr_offset, nvm_data; 394 u8 alt_mac_addr[ETH_ADDR_LEN]; 395 396 DEBUGFUNC("e1000_check_alt_mac_addr_generic"); 397 398 ret_val = hw->nvm.ops.read(hw, NVM_COMPAT, 1, &nvm_data); 399 if (ret_val) 400 return ret_val; 401 402 /* not supported on older hardware or 82573 */ 403 if ((hw->mac.type < e1000_82571) || (hw->mac.type == e1000_82573)) 404 return E1000_SUCCESS; 405 406 /* 407 * Alternate MAC address is handled by the option ROM for 82580 408 * and newer. SW support not required. 409 */ 410 if (hw->mac.type >= e1000_82580) 411 return E1000_SUCCESS; 412 413 ret_val = hw->nvm.ops.read(hw, NVM_ALT_MAC_ADDR_PTR, 1, 414 &nvm_alt_mac_addr_offset); 415 if (ret_val) { 416 DEBUGOUT("NVM Read Error\n"); 417 return ret_val; 418 } 419 420 if ((nvm_alt_mac_addr_offset == 0xFFFF) || 421 (nvm_alt_mac_addr_offset == 0x0000)) 422 /* There is no Alternate MAC Address */ 423 return E1000_SUCCESS; 424 425 if (hw->bus.func == E1000_FUNC_1) 426 nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1; 427 if (hw->bus.func == E1000_FUNC_2) 428 nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN2; 429 430 if (hw->bus.func == E1000_FUNC_3) 431 nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN3; 432 for (i = 0; i < ETH_ADDR_LEN; i += 2) { 433 offset = nvm_alt_mac_addr_offset + (i >> 1); 434 ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data); 435 if (ret_val) { 436 DEBUGOUT("NVM Read Error\n"); 437 return ret_val; 438 } 439 440 alt_mac_addr[i] = (u8)(nvm_data & 0xFF); 441 alt_mac_addr[i + 1] = (u8)(nvm_data >> 8); 442 } 443 444 /* if multicast bit is set, the alternate address will not be used */ 445 if (alt_mac_addr[0] & 0x01) { 446 DEBUGOUT("Ignoring Alternate Mac Address with MC bit set\n"); 447 return E1000_SUCCESS; 448 } 449 450 /* 451 * We have a valid alternate MAC address, and we want to treat it the 452 * same as the normal permanent MAC address stored by the HW into the 453 * RAR. Do this by mapping this address into RAR0. 454 */ 455 hw->mac.ops.rar_set(hw, alt_mac_addr, 0); 456 457 return E1000_SUCCESS; 458 } 459 460 /** 461 * e1000_rar_set_generic - Set receive address register 462 * @hw: pointer to the HW structure 463 * @addr: pointer to the receive address 464 * @index: receive address array register 465 * 466 * Sets the receive address array register at index to the address passed 467 * in by addr. 468 **/ 469 static void e1000_rar_set_generic(struct e1000_hw *hw, u8 *addr, u32 index) 470 { 471 u32 rar_low, rar_high; 472 473 DEBUGFUNC("e1000_rar_set_generic"); 474 475 /* 476 * HW expects these in little endian so we reverse the byte order 477 * from network order (big endian) to little endian 478 */ 479 rar_low = ((u32) addr[0] | ((u32) addr[1] << 8) | 480 ((u32) addr[2] << 16) | ((u32) addr[3] << 24)); 481 482 rar_high = ((u32) addr[4] | ((u32) addr[5] << 8)); 483 484 /* If MAC address zero, no need to set the AV bit */ 485 if (rar_low || rar_high) 486 rar_high |= E1000_RAH_AV; 487 488 /* 489 * Some bridges will combine consecutive 32-bit writes into 490 * a single burst write, which will malfunction on some parts. 491 * The flushes avoid this. 492 */ 493 E1000_WRITE_REG(hw, E1000_RAL(index), rar_low); 494 E1000_WRITE_FLUSH(hw); 495 E1000_WRITE_REG(hw, E1000_RAH(index), rar_high); 496 E1000_WRITE_FLUSH(hw); 497 } 498 499 /** 500 * e1000_hash_mc_addr_generic - Generate a multicast hash value 501 * @hw: pointer to the HW structure 502 * @mc_addr: pointer to a multicast address 503 * 504 * Generates a multicast address hash value which is used to determine 505 * the multicast filter table array address and new table value. 506 **/ 507 u32 e1000_hash_mc_addr_generic(struct e1000_hw *hw, u8 *mc_addr) 508 { 509 u32 hash_value, hash_mask; 510 u8 bit_shift = 0; 511 512 DEBUGFUNC("e1000_hash_mc_addr_generic"); 513 514 /* Register count multiplied by bits per register */ 515 hash_mask = (hw->mac.mta_reg_count * 32) - 1; 516 517 /* 518 * For a mc_filter_type of 0, bit_shift is the number of left-shifts 519 * where 0xFF would still fall within the hash mask. 520 */ 521 while (hash_mask >> bit_shift != 0xFF) 522 bit_shift++; 523 524 /* 525 * The portion of the address that is used for the hash table 526 * is determined by the mc_filter_type setting. 527 * The algorithm is such that there is a total of 8 bits of shifting. 528 * The bit_shift for a mc_filter_type of 0 represents the number of 529 * left-shifts where the MSB of mc_addr[5] would still fall within 530 * the hash_mask. Case 0 does this exactly. Since there are a total 531 * of 8 bits of shifting, then mc_addr[4] will shift right the 532 * remaining number of bits. Thus 8 - bit_shift. The rest of the 533 * cases are a variation of this algorithm...essentially raising the 534 * number of bits to shift mc_addr[5] left, while still keeping the 535 * 8-bit shifting total. 536 * 537 * For example, given the following Destination MAC Address and an 538 * mta register count of 128 (thus a 4096-bit vector and 0xFFF mask), 539 * we can see that the bit_shift for case 0 is 4. These are the hash 540 * values resulting from each mc_filter_type... 541 * [0] [1] [2] [3] [4] [5] 542 * 01 AA 00 12 34 56 543 * LSB MSB 544 * 545 * case 0: hash_value = ((0x34 >> 4) | (0x56 << 4)) & 0xFFF = 0x563 546 * case 1: hash_value = ((0x34 >> 3) | (0x56 << 5)) & 0xFFF = 0xAC6 547 * case 2: hash_value = ((0x34 >> 2) | (0x56 << 6)) & 0xFFF = 0x163 548 * case 3: hash_value = ((0x34 >> 0) | (0x56 << 8)) & 0xFFF = 0x634 549 */ 550 switch (hw->mac.mc_filter_type) { 551 default: 552 case 0: 553 break; 554 case 1: 555 bit_shift += 1; 556 break; 557 case 2: 558 bit_shift += 2; 559 break; 560 case 3: 561 bit_shift += 4; 562 break; 563 } 564 565 hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) | 566 (((u16) mc_addr[5]) << bit_shift))); 567 568 return hash_value; 569 } 570 571 /** 572 * e1000_update_mc_addr_list_generic - Update Multicast addresses 573 * @hw: pointer to the HW structure 574 * @mc_addr_list: array of multicast addresses to program 575 * @mc_addr_count: number of multicast addresses to program 576 * 577 * Updates entire Multicast Table Array. 578 * The caller must have a packed mc_addr_list of multicast addresses. 579 **/ 580 void e1000_update_mc_addr_list_generic(struct e1000_hw *hw, 581 u8 *mc_addr_list, u32 mc_addr_count) 582 { 583 u32 hash_value, hash_bit, hash_reg; 584 int i; 585 586 DEBUGFUNC("e1000_update_mc_addr_list_generic"); 587 588 /* clear mta_shadow */ 589 memset(&hw->mac.mta_shadow, 0, sizeof(hw->mac.mta_shadow)); 590 591 /* update mta_shadow from mc_addr_list */ 592 for (i = 0; (u32) i < mc_addr_count; i++) { 593 hash_value = e1000_hash_mc_addr_generic(hw, mc_addr_list); 594 595 hash_reg = (hash_value >> 5) & (hw->mac.mta_reg_count - 1); 596 hash_bit = hash_value & 0x1F; 597 598 hw->mac.mta_shadow[hash_reg] |= (1 << hash_bit); 599 mc_addr_list += (ETH_ADDR_LEN); 600 } 601 602 /* replace the entire MTA table */ 603 for (i = hw->mac.mta_reg_count - 1; i >= 0; i--) 604 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, hw->mac.mta_shadow[i]); 605 E1000_WRITE_FLUSH(hw); 606 } 607 608 /** 609 * e1000_pcix_mmrbc_workaround_generic - Fix incorrect MMRBC value 610 * @hw: pointer to the HW structure 611 * 612 * In certain situations, a system BIOS may report that the PCIx maximum 613 * memory read byte count (MMRBC) value is higher than than the actual 614 * value. We check the PCIx command register with the current PCIx status 615 * register. 616 **/ 617 void e1000_pcix_mmrbc_workaround_generic(struct e1000_hw *hw) 618 { 619 u16 cmd_mmrbc; 620 u16 pcix_cmd; 621 u16 pcix_stat_hi_word; 622 u16 stat_mmrbc; 623 624 DEBUGFUNC("e1000_pcix_mmrbc_workaround_generic"); 625 626 /* Workaround for PCI-X issue when BIOS sets MMRBC incorrectly */ 627 if (hw->bus.type != e1000_bus_type_pcix) 628 return; 629 630 e1000_read_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd); 631 e1000_read_pci_cfg(hw, PCIX_STATUS_REGISTER_HI, &pcix_stat_hi_word); 632 cmd_mmrbc = (pcix_cmd & PCIX_COMMAND_MMRBC_MASK) >> 633 PCIX_COMMAND_MMRBC_SHIFT; 634 stat_mmrbc = (pcix_stat_hi_word & PCIX_STATUS_HI_MMRBC_MASK) >> 635 PCIX_STATUS_HI_MMRBC_SHIFT; 636 if (stat_mmrbc == PCIX_STATUS_HI_MMRBC_4K) 637 stat_mmrbc = PCIX_STATUS_HI_MMRBC_2K; 638 if (cmd_mmrbc > stat_mmrbc) { 639 pcix_cmd &= ~PCIX_COMMAND_MMRBC_MASK; 640 pcix_cmd |= stat_mmrbc << PCIX_COMMAND_MMRBC_SHIFT; 641 e1000_write_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd); 642 } 643 } 644 645 /** 646 * e1000_clear_hw_cntrs_base_generic - Clear base hardware counters 647 * @hw: pointer to the HW structure 648 * 649 * Clears the base hardware counters by reading the counter registers. 650 **/ 651 void e1000_clear_hw_cntrs_base_generic(struct e1000_hw *hw) 652 { 653 DEBUGFUNC("e1000_clear_hw_cntrs_base_generic"); 654 655 E1000_READ_REG(hw, E1000_CRCERRS); 656 E1000_READ_REG(hw, E1000_SYMERRS); 657 E1000_READ_REG(hw, E1000_MPC); 658 E1000_READ_REG(hw, E1000_SCC); 659 E1000_READ_REG(hw, E1000_ECOL); 660 E1000_READ_REG(hw, E1000_MCC); 661 E1000_READ_REG(hw, E1000_LATECOL); 662 E1000_READ_REG(hw, E1000_COLC); 663 E1000_READ_REG(hw, E1000_DC); 664 E1000_READ_REG(hw, E1000_SEC); 665 E1000_READ_REG(hw, E1000_RLEC); 666 E1000_READ_REG(hw, E1000_XONRXC); 667 E1000_READ_REG(hw, E1000_XONTXC); 668 E1000_READ_REG(hw, E1000_XOFFRXC); 669 E1000_READ_REG(hw, E1000_XOFFTXC); 670 E1000_READ_REG(hw, E1000_FCRUC); 671 E1000_READ_REG(hw, E1000_GPRC); 672 E1000_READ_REG(hw, E1000_BPRC); 673 E1000_READ_REG(hw, E1000_MPRC); 674 E1000_READ_REG(hw, E1000_GPTC); 675 E1000_READ_REG(hw, E1000_GORCL); 676 E1000_READ_REG(hw, E1000_GORCH); 677 E1000_READ_REG(hw, E1000_GOTCL); 678 E1000_READ_REG(hw, E1000_GOTCH); 679 E1000_READ_REG(hw, E1000_RNBC); 680 E1000_READ_REG(hw, E1000_RUC); 681 E1000_READ_REG(hw, E1000_RFC); 682 E1000_READ_REG(hw, E1000_ROC); 683 E1000_READ_REG(hw, E1000_RJC); 684 E1000_READ_REG(hw, E1000_TORL); 685 E1000_READ_REG(hw, E1000_TORH); 686 E1000_READ_REG(hw, E1000_TOTL); 687 E1000_READ_REG(hw, E1000_TOTH); 688 E1000_READ_REG(hw, E1000_TPR); 689 E1000_READ_REG(hw, E1000_TPT); 690 E1000_READ_REG(hw, E1000_MPTC); 691 E1000_READ_REG(hw, E1000_BPTC); 692 } 693 694 /** 695 * e1000_check_for_copper_link_generic - Check for link (Copper) 696 * @hw: pointer to the HW structure 697 * 698 * Checks to see of the link status of the hardware has changed. If a 699 * change in link status has been detected, then we read the PHY registers 700 * to get the current speed/duplex if link exists. 701 **/ 702 s32 e1000_check_for_copper_link_generic(struct e1000_hw *hw) 703 { 704 struct e1000_mac_info *mac = &hw->mac; 705 s32 ret_val; 706 bool link; 707 708 DEBUGFUNC("e1000_check_for_copper_link"); 709 710 /* 711 * We only want to go out to the PHY registers to see if Auto-Neg 712 * has completed and/or if our link status has changed. The 713 * get_link_status flag is set upon receiving a Link Status 714 * Change or Rx Sequence Error interrupt. 715 */ 716 if (!mac->get_link_status) 717 return E1000_SUCCESS; 718 719 /* 720 * First we want to see if the MII Status Register reports 721 * link. If so, then we want to get the current speed/duplex 722 * of the PHY. 723 */ 724 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); 725 if (ret_val) 726 return ret_val; 727 728 if (!link) 729 return E1000_SUCCESS; /* No link detected */ 730 731 mac->get_link_status = FALSE; 732 733 /* 734 * Check if there was DownShift, must be checked 735 * immediately after link-up 736 */ 737 e1000_check_downshift_generic(hw); 738 739 /* 740 * If we are forcing speed/duplex, then we simply return since 741 * we have already determined whether we have link or not. 742 */ 743 if (!mac->autoneg) 744 return -E1000_ERR_CONFIG; 745 746 /* 747 * Auto-Neg is enabled. Auto Speed Detection takes care 748 * of MAC speed/duplex configuration. So we only need to 749 * configure Collision Distance in the MAC. 750 */ 751 mac->ops.config_collision_dist(hw); 752 753 /* 754 * Configure Flow Control now that Auto-Neg has completed. 755 * First, we need to restore the desired flow control 756 * settings because we may have had to re-autoneg with a 757 * different link partner. 758 */ 759 ret_val = e1000_config_fc_after_link_up_generic(hw); 760 if (ret_val) 761 DEBUGOUT("Error configuring flow control\n"); 762 763 return ret_val; 764 } 765 766 /** 767 * e1000_check_for_fiber_link_generic - Check for link (Fiber) 768 * @hw: pointer to the HW structure 769 * 770 * Checks for link up on the hardware. If link is not up and we have 771 * a signal, then we need to force link up. 772 **/ 773 s32 e1000_check_for_fiber_link_generic(struct e1000_hw *hw) 774 { 775 struct e1000_mac_info *mac = &hw->mac; 776 u32 rxcw; 777 u32 ctrl; 778 u32 status; 779 s32 ret_val; 780 781 DEBUGFUNC("e1000_check_for_fiber_link_generic"); 782 783 ctrl = E1000_READ_REG(hw, E1000_CTRL); 784 status = E1000_READ_REG(hw, E1000_STATUS); 785 rxcw = E1000_READ_REG(hw, E1000_RXCW); 786 787 /* 788 * If we don't have link (auto-negotiation failed or link partner 789 * cannot auto-negotiate), the cable is plugged in (we have signal), 790 * and our link partner is not trying to auto-negotiate with us (we 791 * are receiving idles or data), we need to force link up. We also 792 * need to give auto-negotiation time to complete, in case the cable 793 * was just plugged in. The autoneg_failed flag does this. 794 */ 795 /* (ctrl & E1000_CTRL_SWDPIN1) == 1 == have signal */ 796 if ((ctrl & E1000_CTRL_SWDPIN1) && !(status & E1000_STATUS_LU) && 797 !(rxcw & E1000_RXCW_C)) { 798 if (!mac->autoneg_failed) { 799 mac->autoneg_failed = TRUE; 800 return E1000_SUCCESS; 801 } 802 DEBUGOUT("NOT Rx'ing /C/, disable AutoNeg and force link.\n"); 803 804 /* Disable auto-negotiation in the TXCW register */ 805 E1000_WRITE_REG(hw, E1000_TXCW, (mac->txcw & ~E1000_TXCW_ANE)); 806 807 /* Force link-up and also force full-duplex. */ 808 ctrl = E1000_READ_REG(hw, E1000_CTRL); 809 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD); 810 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 811 812 /* Configure Flow Control after forcing link up. */ 813 ret_val = e1000_config_fc_after_link_up_generic(hw); 814 if (ret_val) { 815 DEBUGOUT("Error configuring flow control\n"); 816 return ret_val; 817 } 818 } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) { 819 /* 820 * If we are forcing link and we are receiving /C/ ordered 821 * sets, re-enable auto-negotiation in the TXCW register 822 * and disable forced link in the Device Control register 823 * in an attempt to auto-negotiate with our link partner. 824 */ 825 DEBUGOUT("Rx'ing /C/, enable AutoNeg and stop forcing link.\n"); 826 E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw); 827 E1000_WRITE_REG(hw, E1000_CTRL, (ctrl & ~E1000_CTRL_SLU)); 828 829 mac->serdes_has_link = TRUE; 830 } 831 832 return E1000_SUCCESS; 833 } 834 835 /** 836 * e1000_check_for_serdes_link_generic - Check for link (Serdes) 837 * @hw: pointer to the HW structure 838 * 839 * Checks for link up on the hardware. If link is not up and we have 840 * a signal, then we need to force link up. 841 **/ 842 s32 e1000_check_for_serdes_link_generic(struct e1000_hw *hw) 843 { 844 struct e1000_mac_info *mac = &hw->mac; 845 u32 rxcw; 846 u32 ctrl; 847 u32 status; 848 s32 ret_val; 849 850 DEBUGFUNC("e1000_check_for_serdes_link_generic"); 851 852 ctrl = E1000_READ_REG(hw, E1000_CTRL); 853 status = E1000_READ_REG(hw, E1000_STATUS); 854 rxcw = E1000_READ_REG(hw, E1000_RXCW); 855 856 /* 857 * If we don't have link (auto-negotiation failed or link partner 858 * cannot auto-negotiate), and our link partner is not trying to 859 * auto-negotiate with us (we are receiving idles or data), 860 * we need to force link up. We also need to give auto-negotiation 861 * time to complete. 862 */ 863 /* (ctrl & E1000_CTRL_SWDPIN1) == 1 == have signal */ 864 if (!(status & E1000_STATUS_LU) && !(rxcw & E1000_RXCW_C)) { 865 if (!mac->autoneg_failed) { 866 mac->autoneg_failed = TRUE; 867 return E1000_SUCCESS; 868 } 869 DEBUGOUT("NOT Rx'ing /C/, disable AutoNeg and force link.\n"); 870 871 /* Disable auto-negotiation in the TXCW register */ 872 E1000_WRITE_REG(hw, E1000_TXCW, (mac->txcw & ~E1000_TXCW_ANE)); 873 874 /* Force link-up and also force full-duplex. */ 875 ctrl = E1000_READ_REG(hw, E1000_CTRL); 876 ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD); 877 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 878 879 /* Configure Flow Control after forcing link up. */ 880 ret_val = e1000_config_fc_after_link_up_generic(hw); 881 if (ret_val) { 882 DEBUGOUT("Error configuring flow control\n"); 883 return ret_val; 884 } 885 } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) { 886 /* 887 * If we are forcing link and we are receiving /C/ ordered 888 * sets, re-enable auto-negotiation in the TXCW register 889 * and disable forced link in the Device Control register 890 * in an attempt to auto-negotiate with our link partner. 891 */ 892 DEBUGOUT("Rx'ing /C/, enable AutoNeg and stop forcing link.\n"); 893 E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw); 894 E1000_WRITE_REG(hw, E1000_CTRL, (ctrl & ~E1000_CTRL_SLU)); 895 896 mac->serdes_has_link = TRUE; 897 } else if (!(E1000_TXCW_ANE & E1000_READ_REG(hw, E1000_TXCW))) { 898 /* 899 * If we force link for non-auto-negotiation switch, check 900 * link status based on MAC synchronization for internal 901 * serdes media type. 902 */ 903 /* SYNCH bit and IV bit are sticky. */ 904 usec_delay(10); 905 rxcw = E1000_READ_REG(hw, E1000_RXCW); 906 if (rxcw & E1000_RXCW_SYNCH) { 907 if (!(rxcw & E1000_RXCW_IV)) { 908 mac->serdes_has_link = TRUE; 909 DEBUGOUT("SERDES: Link up - forced.\n"); 910 } 911 } else { 912 mac->serdes_has_link = FALSE; 913 DEBUGOUT("SERDES: Link down - force failed.\n"); 914 } 915 } 916 917 if (E1000_TXCW_ANE & E1000_READ_REG(hw, E1000_TXCW)) { 918 status = E1000_READ_REG(hw, E1000_STATUS); 919 if (status & E1000_STATUS_LU) { 920 /* SYNCH bit and IV bit are sticky, so reread rxcw. */ 921 usec_delay(10); 922 rxcw = E1000_READ_REG(hw, E1000_RXCW); 923 if (rxcw & E1000_RXCW_SYNCH) { 924 if (!(rxcw & E1000_RXCW_IV)) { 925 mac->serdes_has_link = TRUE; 926 DEBUGOUT("SERDES: Link up - autoneg completed successfully.\n"); 927 } else { 928 mac->serdes_has_link = FALSE; 929 DEBUGOUT("SERDES: Link down - invalid codewords detected in autoneg.\n"); 930 } 931 } else { 932 mac->serdes_has_link = FALSE; 933 DEBUGOUT("SERDES: Link down - no sync.\n"); 934 } 935 } else { 936 mac->serdes_has_link = FALSE; 937 DEBUGOUT("SERDES: Link down - autoneg failed\n"); 938 } 939 } 940 941 return E1000_SUCCESS; 942 } 943 944 /** 945 * e1000_set_default_fc_generic - Set flow control default values 946 * @hw: pointer to the HW structure 947 * 948 * Read the EEPROM for the default values for flow control and store the 949 * values. 950 **/ 951 s32 e1000_set_default_fc_generic(struct e1000_hw *hw) 952 { 953 s32 ret_val; 954 u16 nvm_data; 955 956 DEBUGFUNC("e1000_set_default_fc_generic"); 957 958 /* 959 * Read and store word 0x0F of the EEPROM. This word contains bits 960 * that determine the hardware's default PAUSE (flow control) mode, 961 * a bit that determines whether the HW defaults to enabling or 962 * disabling auto-negotiation, and the direction of the 963 * SW defined pins. If there is no SW over-ride of the flow 964 * control setting, then the variable hw->fc will 965 * be initialized based on a value in the EEPROM. 966 */ 967 ret_val = hw->nvm.ops.read(hw, NVM_INIT_CONTROL2_REG, 1, &nvm_data); 968 969 if (ret_val) { 970 DEBUGOUT("NVM Read Error\n"); 971 return ret_val; 972 } 973 974 if (!(nvm_data & NVM_WORD0F_PAUSE_MASK)) 975 hw->fc.requested_mode = e1000_fc_none; 976 else if ((nvm_data & NVM_WORD0F_PAUSE_MASK) == 977 NVM_WORD0F_ASM_DIR) 978 hw->fc.requested_mode = e1000_fc_tx_pause; 979 else 980 hw->fc.requested_mode = e1000_fc_full; 981 982 return E1000_SUCCESS; 983 } 984 985 /** 986 * e1000_setup_link_generic - Setup flow control and link settings 987 * @hw: pointer to the HW structure 988 * 989 * Determines which flow control settings to use, then configures flow 990 * control. Calls the appropriate media-specific link configuration 991 * function. Assuming the adapter has a valid link partner, a valid link 992 * should be established. Assumes the hardware has previously been reset 993 * and the transmitter and receiver are not enabled. 994 **/ 995 s32 e1000_setup_link_generic(struct e1000_hw *hw) 996 { 997 s32 ret_val; 998 999 DEBUGFUNC("e1000_setup_link_generic"); 1000 1001 /* 1002 * In the case of the phy reset being blocked, we already have a link. 1003 * We do not need to set it up again. 1004 */ 1005 if (hw->phy.ops.check_reset_block && hw->phy.ops.check_reset_block(hw)) 1006 return E1000_SUCCESS; 1007 1008 /* 1009 * If requested flow control is set to default, set flow control 1010 * based on the EEPROM flow control settings. 1011 */ 1012 if (hw->fc.requested_mode == e1000_fc_default) { 1013 ret_val = e1000_set_default_fc_generic(hw); 1014 if (ret_val) 1015 return ret_val; 1016 } 1017 1018 /* 1019 * Save off the requested flow control mode for use later. Depending 1020 * on the link partner's capabilities, we may or may not use this mode. 1021 */ 1022 hw->fc.current_mode = hw->fc.requested_mode; 1023 1024 DEBUGOUT1("After fix-ups FlowControl is now = %x\n", 1025 hw->fc.current_mode); 1026 1027 /* Call the necessary media_type subroutine to configure the link. */ 1028 ret_val = hw->mac.ops.setup_physical_interface(hw); 1029 if (ret_val) 1030 return ret_val; 1031 1032 /* 1033 * Initialize the flow control address, type, and PAUSE timer 1034 * registers to their default values. This is done even if flow 1035 * control is disabled, because it does not hurt anything to 1036 * initialize these registers. 1037 */ 1038 DEBUGOUT("Initializing the Flow Control address, type and timer regs\n"); 1039 E1000_WRITE_REG(hw, E1000_FCT, FLOW_CONTROL_TYPE); 1040 E1000_WRITE_REG(hw, E1000_FCAH, FLOW_CONTROL_ADDRESS_HIGH); 1041 E1000_WRITE_REG(hw, E1000_FCAL, FLOW_CONTROL_ADDRESS_LOW); 1042 1043 E1000_WRITE_REG(hw, E1000_FCTTV, hw->fc.pause_time); 1044 1045 return e1000_set_fc_watermarks_generic(hw); 1046 } 1047 1048 /** 1049 * e1000_commit_fc_settings_generic - Configure flow control 1050 * @hw: pointer to the HW structure 1051 * 1052 * Write the flow control settings to the Transmit Config Word Register (TXCW) 1053 * base on the flow control settings in e1000_mac_info. 1054 **/ 1055 s32 e1000_commit_fc_settings_generic(struct e1000_hw *hw) 1056 { 1057 struct e1000_mac_info *mac = &hw->mac; 1058 u32 txcw; 1059 1060 DEBUGFUNC("e1000_commit_fc_settings_generic"); 1061 1062 /* 1063 * Check for a software override of the flow control settings, and 1064 * setup the device accordingly. If auto-negotiation is enabled, then 1065 * software will have to set the "PAUSE" bits to the correct value in 1066 * the Transmit Config Word Register (TXCW) and re-start auto- 1067 * negotiation. However, if auto-negotiation is disabled, then 1068 * software will have to manually configure the two flow control enable 1069 * bits in the CTRL register. 1070 * 1071 * The possible values of the "fc" parameter are: 1072 * 0: Flow control is completely disabled 1073 * 1: Rx flow control is enabled (we can receive pause frames, 1074 * but not send pause frames). 1075 * 2: Tx flow control is enabled (we can send pause frames but we 1076 * do not support receiving pause frames). 1077 * 3: Both Rx and Tx flow control (symmetric) are enabled. 1078 */ 1079 switch (hw->fc.current_mode) { 1080 case e1000_fc_none: 1081 /* Flow control completely disabled by a software over-ride. */ 1082 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD); 1083 break; 1084 case e1000_fc_rx_pause: 1085 /* 1086 * Rx Flow control is enabled and Tx Flow control is disabled 1087 * by a software over-ride. Since there really isn't a way to 1088 * advertise that we are capable of Rx Pause ONLY, we will 1089 * advertise that we support both symmetric and asymmetric Rx 1090 * PAUSE. Later, we will disable the adapter's ability to send 1091 * PAUSE frames. 1092 */ 1093 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK); 1094 break; 1095 case e1000_fc_tx_pause: 1096 /* 1097 * Tx Flow control is enabled, and Rx Flow control is disabled, 1098 * by a software over-ride. 1099 */ 1100 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR); 1101 break; 1102 case e1000_fc_full: 1103 /* 1104 * Flow control (both Rx and Tx) is enabled by a software 1105 * over-ride. 1106 */ 1107 txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK); 1108 break; 1109 default: 1110 DEBUGOUT("Flow control param set incorrectly\n"); 1111 return -E1000_ERR_CONFIG; 1112 break; 1113 } 1114 1115 E1000_WRITE_REG(hw, E1000_TXCW, txcw); 1116 mac->txcw = txcw; 1117 1118 return E1000_SUCCESS; 1119 } 1120 1121 /** 1122 * e1000_poll_fiber_serdes_link_generic - Poll for link up 1123 * @hw: pointer to the HW structure 1124 * 1125 * Polls for link up by reading the status register, if link fails to come 1126 * up with auto-negotiation, then the link is forced if a signal is detected. 1127 **/ 1128 s32 e1000_poll_fiber_serdes_link_generic(struct e1000_hw *hw) 1129 { 1130 struct e1000_mac_info *mac = &hw->mac; 1131 u32 i, status; 1132 s32 ret_val; 1133 1134 DEBUGFUNC("e1000_poll_fiber_serdes_link_generic"); 1135 1136 /* 1137 * If we have a signal (the cable is plugged in, or assumed TRUE for 1138 * serdes media) then poll for a "Link-Up" indication in the Device 1139 * Status Register. Time-out if a link isn't seen in 500 milliseconds 1140 * seconds (Auto-negotiation should complete in less than 500 1141 * milliseconds even if the other end is doing it in SW). 1142 */ 1143 for (i = 0; i < FIBER_LINK_UP_LIMIT; i++) { 1144 msec_delay(10); 1145 status = E1000_READ_REG(hw, E1000_STATUS); 1146 if (status & E1000_STATUS_LU) 1147 break; 1148 } 1149 if (i == FIBER_LINK_UP_LIMIT) { 1150 DEBUGOUT("Never got a valid link from auto-neg!!!\n"); 1151 mac->autoneg_failed = TRUE; 1152 /* 1153 * AutoNeg failed to achieve a link, so we'll call 1154 * mac->check_for_link. This routine will force the 1155 * link up if we detect a signal. This will allow us to 1156 * communicate with non-autonegotiating link partners. 1157 */ 1158 ret_val = mac->ops.check_for_link(hw); 1159 if (ret_val) { 1160 DEBUGOUT("Error while checking for link\n"); 1161 return ret_val; 1162 } 1163 mac->autoneg_failed = FALSE; 1164 } else { 1165 mac->autoneg_failed = FALSE; 1166 DEBUGOUT("Valid Link Found\n"); 1167 } 1168 1169 return E1000_SUCCESS; 1170 } 1171 1172 /** 1173 * e1000_setup_fiber_serdes_link_generic - Setup link for fiber/serdes 1174 * @hw: pointer to the HW structure 1175 * 1176 * Configures collision distance and flow control for fiber and serdes 1177 * links. Upon successful setup, poll for link. 1178 **/ 1179 s32 e1000_setup_fiber_serdes_link_generic(struct e1000_hw *hw) 1180 { 1181 u32 ctrl; 1182 s32 ret_val; 1183 1184 DEBUGFUNC("e1000_setup_fiber_serdes_link_generic"); 1185 1186 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1187 1188 /* Take the link out of reset */ 1189 ctrl &= ~E1000_CTRL_LRST; 1190 1191 hw->mac.ops.config_collision_dist(hw); 1192 1193 ret_val = e1000_commit_fc_settings_generic(hw); 1194 if (ret_val) 1195 return ret_val; 1196 1197 /* 1198 * Since auto-negotiation is enabled, take the link out of reset (the 1199 * link will be in reset, because we previously reset the chip). This 1200 * will restart auto-negotiation. If auto-negotiation is successful 1201 * then the link-up status bit will be set and the flow control enable 1202 * bits (RFCE and TFCE) will be set according to their negotiated value. 1203 */ 1204 DEBUGOUT("Auto-negotiation enabled\n"); 1205 1206 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1207 E1000_WRITE_FLUSH(hw); 1208 msec_delay(1); 1209 1210 /* 1211 * For these adapters, the SW definable pin 1 is set when the optics 1212 * detect a signal. If we have a signal, then poll for a "Link-Up" 1213 * indication. 1214 */ 1215 if (hw->phy.media_type == e1000_media_type_internal_serdes || 1216 (E1000_READ_REG(hw, E1000_CTRL) & E1000_CTRL_SWDPIN1)) { 1217 ret_val = e1000_poll_fiber_serdes_link_generic(hw); 1218 } else { 1219 DEBUGOUT("No signal detected\n"); 1220 } 1221 1222 return ret_val; 1223 } 1224 1225 /** 1226 * e1000_config_collision_dist_generic - Configure collision distance 1227 * @hw: pointer to the HW structure 1228 * 1229 * Configures the collision distance to the default value and is used 1230 * during link setup. 1231 **/ 1232 static void e1000_config_collision_dist_generic(struct e1000_hw *hw) 1233 { 1234 u32 tctl; 1235 1236 DEBUGFUNC("e1000_config_collision_dist_generic"); 1237 1238 tctl = E1000_READ_REG(hw, E1000_TCTL); 1239 1240 tctl &= ~E1000_TCTL_COLD; 1241 tctl |= E1000_COLLISION_DISTANCE << E1000_COLD_SHIFT; 1242 1243 E1000_WRITE_REG(hw, E1000_TCTL, tctl); 1244 E1000_WRITE_FLUSH(hw); 1245 } 1246 1247 /** 1248 * e1000_set_fc_watermarks_generic - Set flow control high/low watermarks 1249 * @hw: pointer to the HW structure 1250 * 1251 * Sets the flow control high/low threshold (watermark) registers. If 1252 * flow control XON frame transmission is enabled, then set XON frame 1253 * transmission as well. 1254 **/ 1255 s32 e1000_set_fc_watermarks_generic(struct e1000_hw *hw) 1256 { 1257 u32 fcrtl = 0, fcrth = 0; 1258 1259 DEBUGFUNC("e1000_set_fc_watermarks_generic"); 1260 1261 /* 1262 * Set the flow control receive threshold registers. Normally, 1263 * these registers will be set to a default threshold that may be 1264 * adjusted later by the driver's runtime code. However, if the 1265 * ability to transmit pause frames is not enabled, then these 1266 * registers will be set to 0. 1267 */ 1268 if (hw->fc.current_mode & e1000_fc_tx_pause) { 1269 /* 1270 * We need to set up the Receive Threshold high and low water 1271 * marks as well as (optionally) enabling the transmission of 1272 * XON frames. 1273 */ 1274 fcrtl = hw->fc.low_water; 1275 if (hw->fc.send_xon) 1276 fcrtl |= E1000_FCRTL_XONE; 1277 1278 fcrth = hw->fc.high_water; 1279 } 1280 E1000_WRITE_REG(hw, E1000_FCRTL, fcrtl); 1281 E1000_WRITE_REG(hw, E1000_FCRTH, fcrth); 1282 1283 return E1000_SUCCESS; 1284 } 1285 1286 /** 1287 * e1000_force_mac_fc_generic - Force the MAC's flow control settings 1288 * @hw: pointer to the HW structure 1289 * 1290 * Force the MAC's flow control settings. Sets the TFCE and RFCE bits in the 1291 * device control register to reflect the adapter settings. TFCE and RFCE 1292 * need to be explicitly set by software when a copper PHY is used because 1293 * autonegotiation is managed by the PHY rather than the MAC. Software must 1294 * also configure these bits when link is forced on a fiber connection. 1295 **/ 1296 s32 e1000_force_mac_fc_generic(struct e1000_hw *hw) 1297 { 1298 u32 ctrl; 1299 1300 DEBUGFUNC("e1000_force_mac_fc_generic"); 1301 1302 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1303 1304 /* 1305 * Because we didn't get link via the internal auto-negotiation 1306 * mechanism (we either forced link or we got link via PHY 1307 * auto-neg), we have to manually enable/disable transmit an 1308 * receive flow control. 1309 * 1310 * The "Case" statement below enables/disable flow control 1311 * according to the "hw->fc.current_mode" parameter. 1312 * 1313 * The possible values of the "fc" parameter are: 1314 * 0: Flow control is completely disabled 1315 * 1: Rx flow control is enabled (we can receive pause 1316 * frames but not send pause frames). 1317 * 2: Tx flow control is enabled (we can send pause frames 1318 * frames but we do not receive pause frames). 1319 * 3: Both Rx and Tx flow control (symmetric) is enabled. 1320 * other: No other values should be possible at this point. 1321 */ 1322 DEBUGOUT1("hw->fc.current_mode = %u\n", hw->fc.current_mode); 1323 1324 switch (hw->fc.current_mode) { 1325 case e1000_fc_none: 1326 ctrl &= (~(E1000_CTRL_TFCE | E1000_CTRL_RFCE)); 1327 break; 1328 case e1000_fc_rx_pause: 1329 ctrl &= (~E1000_CTRL_TFCE); 1330 ctrl |= E1000_CTRL_RFCE; 1331 break; 1332 case e1000_fc_tx_pause: 1333 ctrl &= (~E1000_CTRL_RFCE); 1334 ctrl |= E1000_CTRL_TFCE; 1335 break; 1336 case e1000_fc_full: 1337 ctrl |= (E1000_CTRL_TFCE | E1000_CTRL_RFCE); 1338 break; 1339 default: 1340 DEBUGOUT("Flow control param set incorrectly\n"); 1341 return -E1000_ERR_CONFIG; 1342 } 1343 1344 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1345 1346 return E1000_SUCCESS; 1347 } 1348 1349 /** 1350 * e1000_config_fc_after_link_up_generic - Configures flow control after link 1351 * @hw: pointer to the HW structure 1352 * 1353 * Checks the status of auto-negotiation after link up to ensure that the 1354 * speed and duplex were not forced. If the link needed to be forced, then 1355 * flow control needs to be forced also. If auto-negotiation is enabled 1356 * and did not fail, then we configure flow control based on our link 1357 * partner. 1358 **/ 1359 s32 e1000_config_fc_after_link_up_generic(struct e1000_hw *hw) 1360 { 1361 struct e1000_mac_info *mac = &hw->mac; 1362 s32 ret_val = E1000_SUCCESS; 1363 u16 mii_status_reg, mii_nway_adv_reg, mii_nway_lp_ability_reg; 1364 u16 speed, duplex; 1365 1366 DEBUGFUNC("e1000_config_fc_after_link_up_generic"); 1367 1368 /* 1369 * Check for the case where we have fiber media and auto-neg failed 1370 * so we had to force link. In this case, we need to force the 1371 * configuration of the MAC to match the "fc" parameter. 1372 */ 1373 if (mac->autoneg_failed) { 1374 if (hw->phy.media_type == e1000_media_type_fiber || 1375 hw->phy.media_type == e1000_media_type_internal_serdes) 1376 ret_val = e1000_force_mac_fc_generic(hw); 1377 } else { 1378 if (hw->phy.media_type == e1000_media_type_copper) 1379 ret_val = e1000_force_mac_fc_generic(hw); 1380 } 1381 1382 if (ret_val) { 1383 DEBUGOUT("Error forcing flow control settings\n"); 1384 return ret_val; 1385 } 1386 1387 /* 1388 * Check for the case where we have copper media and auto-neg is 1389 * enabled. In this case, we need to check and see if Auto-Neg 1390 * has completed, and if so, how the PHY and link partner has 1391 * flow control configured. 1392 */ 1393 if ((hw->phy.media_type == e1000_media_type_copper) && mac->autoneg) { 1394 /* 1395 * Read the MII Status Register and check to see if AutoNeg 1396 * has completed. We read this twice because this reg has 1397 * some "sticky" (latched) bits. 1398 */ 1399 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &mii_status_reg); 1400 if (ret_val) 1401 return ret_val; 1402 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &mii_status_reg); 1403 if (ret_val) 1404 return ret_val; 1405 1406 if (!(mii_status_reg & MII_SR_AUTONEG_COMPLETE)) { 1407 DEBUGOUT("Copper PHY and Auto Neg has not completed.\n"); 1408 return ret_val; 1409 } 1410 1411 /* 1412 * The AutoNeg process has completed, so we now need to 1413 * read both the Auto Negotiation Advertisement 1414 * Register (Address 4) and the Auto_Negotiation Base 1415 * Page Ability Register (Address 5) to determine how 1416 * flow control was negotiated. 1417 */ 1418 ret_val = hw->phy.ops.read_reg(hw, PHY_AUTONEG_ADV, 1419 &mii_nway_adv_reg); 1420 if (ret_val) 1421 return ret_val; 1422 ret_val = hw->phy.ops.read_reg(hw, PHY_LP_ABILITY, 1423 &mii_nway_lp_ability_reg); 1424 if (ret_val) 1425 return ret_val; 1426 1427 /* 1428 * Two bits in the Auto Negotiation Advertisement Register 1429 * (Address 4) and two bits in the Auto Negotiation Base 1430 * Page Ability Register (Address 5) determine flow control 1431 * for both the PHY and the link partner. The following 1432 * table, taken out of the IEEE 802.3ab/D6.0 dated March 25, 1433 * 1999, describes these PAUSE resolution bits and how flow 1434 * control is determined based upon these settings. 1435 * NOTE: DC = Don't Care 1436 * 1437 * LOCAL DEVICE | LINK PARTNER 1438 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | NIC Resolution 1439 *-------|---------|-------|---------|-------------------- 1440 * 0 | 0 | DC | DC | e1000_fc_none 1441 * 0 | 1 | 0 | DC | e1000_fc_none 1442 * 0 | 1 | 1 | 0 | e1000_fc_none 1443 * 0 | 1 | 1 | 1 | e1000_fc_tx_pause 1444 * 1 | 0 | 0 | DC | e1000_fc_none 1445 * 1 | DC | 1 | DC | e1000_fc_full 1446 * 1 | 1 | 0 | 0 | e1000_fc_none 1447 * 1 | 1 | 0 | 1 | e1000_fc_rx_pause 1448 * 1449 * Are both PAUSE bits set to 1? If so, this implies 1450 * Symmetric Flow Control is enabled at both ends. The 1451 * ASM_DIR bits are irrelevant per the spec. 1452 * 1453 * For Symmetric Flow Control: 1454 * 1455 * LOCAL DEVICE | LINK PARTNER 1456 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result 1457 *-------|---------|-------|---------|-------------------- 1458 * 1 | DC | 1 | DC | E1000_fc_full 1459 * 1460 */ 1461 if ((mii_nway_adv_reg & NWAY_AR_PAUSE) && 1462 (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) { 1463 /* 1464 * Now we need to check if the user selected Rx ONLY 1465 * of pause frames. In this case, we had to advertise 1466 * FULL flow control because we could not advertise Rx 1467 * ONLY. Hence, we must now check to see if we need to 1468 * turn OFF the TRANSMISSION of PAUSE frames. 1469 */ 1470 if (hw->fc.requested_mode == e1000_fc_full) { 1471 hw->fc.current_mode = e1000_fc_full; 1472 DEBUGOUT("Flow Control = FULL.\n"); 1473 } else { 1474 hw->fc.current_mode = e1000_fc_rx_pause; 1475 DEBUGOUT("Flow Control = Rx PAUSE frames only.\n"); 1476 } 1477 } 1478 /* 1479 * For receiving PAUSE frames ONLY. 1480 * 1481 * LOCAL DEVICE | LINK PARTNER 1482 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result 1483 *-------|---------|-------|---------|-------------------- 1484 * 0 | 1 | 1 | 1 | e1000_fc_tx_pause 1485 */ 1486 else if (!(mii_nway_adv_reg & NWAY_AR_PAUSE) && 1487 (mii_nway_adv_reg & NWAY_AR_ASM_DIR) && 1488 (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) && 1489 (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { 1490 hw->fc.current_mode = e1000_fc_tx_pause; 1491 DEBUGOUT("Flow Control = Tx PAUSE frames only.\n"); 1492 } 1493 /* 1494 * For transmitting PAUSE frames ONLY. 1495 * 1496 * LOCAL DEVICE | LINK PARTNER 1497 * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result 1498 *-------|---------|-------|---------|-------------------- 1499 * 1 | 1 | 0 | 1 | e1000_fc_rx_pause 1500 */ 1501 else if ((mii_nway_adv_reg & NWAY_AR_PAUSE) && 1502 (mii_nway_adv_reg & NWAY_AR_ASM_DIR) && 1503 !(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) && 1504 (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { 1505 hw->fc.current_mode = e1000_fc_rx_pause; 1506 DEBUGOUT("Flow Control = Rx PAUSE frames only.\n"); 1507 } else { 1508 /* 1509 * Per the IEEE spec, at this point flow control 1510 * should be disabled. 1511 */ 1512 hw->fc.current_mode = e1000_fc_none; 1513 DEBUGOUT("Flow Control = NONE.\n"); 1514 } 1515 1516 /* 1517 * Now we need to do one last check... If we auto- 1518 * negotiated to HALF DUPLEX, flow control should not be 1519 * enabled per IEEE 802.3 spec. 1520 */ 1521 ret_val = mac->ops.get_link_up_info(hw, &speed, &duplex); 1522 if (ret_val) { 1523 DEBUGOUT("Error getting link speed and duplex\n"); 1524 return ret_val; 1525 } 1526 1527 if (duplex == HALF_DUPLEX) 1528 hw->fc.current_mode = e1000_fc_none; 1529 1530 /* 1531 * Now we call a subroutine to actually force the MAC 1532 * controller to use the correct flow control settings. 1533 */ 1534 ret_val = e1000_force_mac_fc_generic(hw); 1535 if (ret_val) { 1536 DEBUGOUT("Error forcing flow control settings\n"); 1537 return ret_val; 1538 } 1539 } 1540 1541 return E1000_SUCCESS; 1542 } 1543 1544 /** 1545 * e1000_get_speed_and_duplex_copper_generic - Retrieve current speed/duplex 1546 * @hw: pointer to the HW structure 1547 * @speed: stores the current speed 1548 * @duplex: stores the current duplex 1549 * 1550 * Read the status register for the current speed/duplex and store the current 1551 * speed and duplex for copper connections. 1552 **/ 1553 s32 e1000_get_speed_and_duplex_copper_generic(struct e1000_hw *hw, u16 *speed, 1554 u16 *duplex) 1555 { 1556 u32 status; 1557 1558 DEBUGFUNC("e1000_get_speed_and_duplex_copper_generic"); 1559 1560 status = E1000_READ_REG(hw, E1000_STATUS); 1561 if (status & E1000_STATUS_SPEED_1000) { 1562 *speed = SPEED_1000; 1563 DEBUGOUT("1000 Mbs, "); 1564 } else if (status & E1000_STATUS_SPEED_100) { 1565 *speed = SPEED_100; 1566 DEBUGOUT("100 Mbs, "); 1567 } else { 1568 *speed = SPEED_10; 1569 DEBUGOUT("10 Mbs, "); 1570 } 1571 1572 if (status & E1000_STATUS_FD) { 1573 *duplex = FULL_DUPLEX; 1574 DEBUGOUT("Full Duplex\n"); 1575 } else { 1576 *duplex = HALF_DUPLEX; 1577 DEBUGOUT("Half Duplex\n"); 1578 } 1579 1580 return E1000_SUCCESS; 1581 } 1582 1583 /** 1584 * e1000_get_speed_and_duplex_fiber_generic - Retrieve current speed/duplex 1585 * @hw: pointer to the HW structure 1586 * @speed: stores the current speed 1587 * @duplex: stores the current duplex 1588 * 1589 * Sets the speed and duplex to gigabit full duplex (the only possible option) 1590 * for fiber/serdes links. 1591 **/ 1592 s32 e1000_get_speed_and_duplex_fiber_serdes_generic(struct e1000_hw *hw, 1593 u16 *speed, u16 *duplex) 1594 { 1595 DEBUGFUNC("e1000_get_speed_and_duplex_fiber_serdes_generic"); 1596 1597 *speed = SPEED_1000; 1598 *duplex = FULL_DUPLEX; 1599 1600 return E1000_SUCCESS; 1601 } 1602 1603 /** 1604 * e1000_get_hw_semaphore_generic - Acquire hardware semaphore 1605 * @hw: pointer to the HW structure 1606 * 1607 * Acquire the HW semaphore to access the PHY or NVM 1608 **/ 1609 s32 e1000_get_hw_semaphore_generic(struct e1000_hw *hw) 1610 { 1611 u32 swsm; 1612 s32 timeout = hw->nvm.word_size + 1; 1613 s32 i = 0; 1614 1615 DEBUGFUNC("e1000_get_hw_semaphore_generic"); 1616 1617 /* Get the SW semaphore */ 1618 while (i < timeout) { 1619 swsm = E1000_READ_REG(hw, E1000_SWSM); 1620 if (!(swsm & E1000_SWSM_SMBI)) 1621 break; 1622 1623 usec_delay(50); 1624 i++; 1625 } 1626 1627 if (i == timeout) { 1628 DEBUGOUT("Driver can't access device - SMBI bit is set.\n"); 1629 return -E1000_ERR_NVM; 1630 } 1631 1632 /* Get the FW semaphore. */ 1633 for (i = 0; i < timeout; i++) { 1634 swsm = E1000_READ_REG(hw, E1000_SWSM); 1635 E1000_WRITE_REG(hw, E1000_SWSM, swsm | E1000_SWSM_SWESMBI); 1636 1637 /* Semaphore acquired if bit latched */ 1638 if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI) 1639 break; 1640 1641 usec_delay(50); 1642 } 1643 1644 if (i == timeout) { 1645 /* Release semaphores */ 1646 e1000_put_hw_semaphore_generic(hw); 1647 DEBUGOUT("Driver can't access the NVM\n"); 1648 return -E1000_ERR_NVM; 1649 } 1650 1651 return E1000_SUCCESS; 1652 } 1653 1654 /** 1655 * e1000_put_hw_semaphore_generic - Release hardware semaphore 1656 * @hw: pointer to the HW structure 1657 * 1658 * Release hardware semaphore used to access the PHY or NVM 1659 **/ 1660 void e1000_put_hw_semaphore_generic(struct e1000_hw *hw) 1661 { 1662 u32 swsm; 1663 1664 DEBUGFUNC("e1000_put_hw_semaphore_generic"); 1665 1666 swsm = E1000_READ_REG(hw, E1000_SWSM); 1667 1668 swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI); 1669 1670 E1000_WRITE_REG(hw, E1000_SWSM, swsm); 1671 } 1672 1673 /** 1674 * e1000_get_auto_rd_done_generic - Check for auto read completion 1675 * @hw: pointer to the HW structure 1676 * 1677 * Check EEPROM for Auto Read done bit. 1678 **/ 1679 s32 e1000_get_auto_rd_done_generic(struct e1000_hw *hw) 1680 { 1681 s32 i = 0; 1682 1683 DEBUGFUNC("e1000_get_auto_rd_done_generic"); 1684 1685 while (i < AUTO_READ_DONE_TIMEOUT) { 1686 if (E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_AUTO_RD) 1687 break; 1688 msec_delay(1); 1689 i++; 1690 } 1691 1692 if (i == AUTO_READ_DONE_TIMEOUT) { 1693 DEBUGOUT("Auto read by HW from NVM has not completed.\n"); 1694 return -E1000_ERR_RESET; 1695 } 1696 1697 return E1000_SUCCESS; 1698 } 1699 1700 /** 1701 * e1000_valid_led_default_generic - Verify a valid default LED config 1702 * @hw: pointer to the HW structure 1703 * @data: pointer to the NVM (EEPROM) 1704 * 1705 * Read the EEPROM for the current default LED configuration. If the 1706 * LED configuration is not valid, set to a valid LED configuration. 1707 **/ 1708 s32 e1000_valid_led_default_generic(struct e1000_hw *hw, u16 *data) 1709 { 1710 s32 ret_val; 1711 1712 DEBUGFUNC("e1000_valid_led_default_generic"); 1713 1714 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data); 1715 if (ret_val) { 1716 DEBUGOUT("NVM Read Error\n"); 1717 return ret_val; 1718 } 1719 1720 if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) 1721 *data = ID_LED_DEFAULT; 1722 1723 return E1000_SUCCESS; 1724 } 1725 1726 /** 1727 * e1000_id_led_init_generic - 1728 * @hw: pointer to the HW structure 1729 * 1730 **/ 1731 s32 e1000_id_led_init_generic(struct e1000_hw *hw) 1732 { 1733 struct e1000_mac_info *mac = &hw->mac; 1734 s32 ret_val; 1735 const u32 ledctl_mask = 0x000000FF; 1736 const u32 ledctl_on = E1000_LEDCTL_MODE_LED_ON; 1737 const u32 ledctl_off = E1000_LEDCTL_MODE_LED_OFF; 1738 u16 data, i, temp; 1739 const u16 led_mask = 0x0F; 1740 1741 DEBUGFUNC("e1000_id_led_init_generic"); 1742 1743 ret_val = hw->nvm.ops.valid_led_default(hw, &data); 1744 if (ret_val) 1745 return ret_val; 1746 1747 mac->ledctl_default = E1000_READ_REG(hw, E1000_LEDCTL); 1748 mac->ledctl_mode1 = mac->ledctl_default; 1749 mac->ledctl_mode2 = mac->ledctl_default; 1750 1751 for (i = 0; i < 4; i++) { 1752 temp = (data >> (i << 2)) & led_mask; 1753 switch (temp) { 1754 case ID_LED_ON1_DEF2: 1755 case ID_LED_ON1_ON2: 1756 case ID_LED_ON1_OFF2: 1757 mac->ledctl_mode1 &= ~(ledctl_mask << (i << 3)); 1758 mac->ledctl_mode1 |= ledctl_on << (i << 3); 1759 break; 1760 case ID_LED_OFF1_DEF2: 1761 case ID_LED_OFF1_ON2: 1762 case ID_LED_OFF1_OFF2: 1763 mac->ledctl_mode1 &= ~(ledctl_mask << (i << 3)); 1764 mac->ledctl_mode1 |= ledctl_off << (i << 3); 1765 break; 1766 default: 1767 /* Do nothing */ 1768 break; 1769 } 1770 switch (temp) { 1771 case ID_LED_DEF1_ON2: 1772 case ID_LED_ON1_ON2: 1773 case ID_LED_OFF1_ON2: 1774 mac->ledctl_mode2 &= ~(ledctl_mask << (i << 3)); 1775 mac->ledctl_mode2 |= ledctl_on << (i << 3); 1776 break; 1777 case ID_LED_DEF1_OFF2: 1778 case ID_LED_ON1_OFF2: 1779 case ID_LED_OFF1_OFF2: 1780 mac->ledctl_mode2 &= ~(ledctl_mask << (i << 3)); 1781 mac->ledctl_mode2 |= ledctl_off << (i << 3); 1782 break; 1783 default: 1784 /* Do nothing */ 1785 break; 1786 } 1787 } 1788 1789 return E1000_SUCCESS; 1790 } 1791 1792 /** 1793 * e1000_setup_led_generic - Configures SW controllable LED 1794 * @hw: pointer to the HW structure 1795 * 1796 * This prepares the SW controllable LED for use and saves the current state 1797 * of the LED so it can be later restored. 1798 **/ 1799 s32 e1000_setup_led_generic(struct e1000_hw *hw) 1800 { 1801 u32 ledctl; 1802 1803 DEBUGFUNC("e1000_setup_led_generic"); 1804 1805 if (hw->mac.ops.setup_led != e1000_setup_led_generic) 1806 return -E1000_ERR_CONFIG; 1807 1808 if (hw->phy.media_type == e1000_media_type_fiber) { 1809 ledctl = E1000_READ_REG(hw, E1000_LEDCTL); 1810 hw->mac.ledctl_default = ledctl; 1811 /* Turn off LED0 */ 1812 ledctl &= ~(E1000_LEDCTL_LED0_IVRT | E1000_LEDCTL_LED0_BLINK | 1813 E1000_LEDCTL_LED0_MODE_MASK); 1814 ledctl |= (E1000_LEDCTL_MODE_LED_OFF << 1815 E1000_LEDCTL_LED0_MODE_SHIFT); 1816 E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl); 1817 } else if (hw->phy.media_type == e1000_media_type_copper) { 1818 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1); 1819 } 1820 1821 return E1000_SUCCESS; 1822 } 1823 1824 /** 1825 * e1000_cleanup_led_generic - Set LED config to default operation 1826 * @hw: pointer to the HW structure 1827 * 1828 * Remove the current LED configuration and set the LED configuration 1829 * to the default value, saved from the EEPROM. 1830 **/ 1831 s32 e1000_cleanup_led_generic(struct e1000_hw *hw) 1832 { 1833 DEBUGFUNC("e1000_cleanup_led_generic"); 1834 1835 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_default); 1836 return E1000_SUCCESS; 1837 } 1838 1839 /** 1840 * e1000_blink_led_generic - Blink LED 1841 * @hw: pointer to the HW structure 1842 * 1843 * Blink the LEDs which are set to be on. 1844 **/ 1845 s32 e1000_blink_led_generic(struct e1000_hw *hw) 1846 { 1847 u32 ledctl_blink = 0; 1848 u32 i; 1849 1850 DEBUGFUNC("e1000_blink_led_generic"); 1851 1852 if (hw->phy.media_type == e1000_media_type_fiber) { 1853 /* always blink LED0 for PCI-E fiber */ 1854 ledctl_blink = E1000_LEDCTL_LED0_BLINK | 1855 (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT); 1856 } else { 1857 /* 1858 * set the blink bit for each LED that's "on" (0x0E) 1859 * in ledctl_mode2 1860 */ 1861 ledctl_blink = hw->mac.ledctl_mode2; 1862 for (i = 0; i < 4; i++) 1863 if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) == 1864 E1000_LEDCTL_MODE_LED_ON) 1865 ledctl_blink |= (E1000_LEDCTL_LED0_BLINK << 1866 (i * 8)); 1867 } 1868 1869 E1000_WRITE_REG(hw, E1000_LEDCTL, ledctl_blink); 1870 1871 return E1000_SUCCESS; 1872 } 1873 1874 /** 1875 * e1000_led_on_generic - Turn LED on 1876 * @hw: pointer to the HW structure 1877 * 1878 * Turn LED on. 1879 **/ 1880 s32 e1000_led_on_generic(struct e1000_hw *hw) 1881 { 1882 u32 ctrl; 1883 1884 DEBUGFUNC("e1000_led_on_generic"); 1885 1886 switch (hw->phy.media_type) { 1887 case e1000_media_type_fiber: 1888 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1889 ctrl &= ~E1000_CTRL_SWDPIN0; 1890 ctrl |= E1000_CTRL_SWDPIO0; 1891 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1892 break; 1893 case e1000_media_type_copper: 1894 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode2); 1895 break; 1896 default: 1897 break; 1898 } 1899 1900 return E1000_SUCCESS; 1901 } 1902 1903 /** 1904 * e1000_led_off_generic - Turn LED off 1905 * @hw: pointer to the HW structure 1906 * 1907 * Turn LED off. 1908 **/ 1909 s32 e1000_led_off_generic(struct e1000_hw *hw) 1910 { 1911 u32 ctrl; 1912 1913 DEBUGFUNC("e1000_led_off_generic"); 1914 1915 switch (hw->phy.media_type) { 1916 case e1000_media_type_fiber: 1917 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1918 ctrl |= E1000_CTRL_SWDPIN0; 1919 ctrl |= E1000_CTRL_SWDPIO0; 1920 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1921 break; 1922 case e1000_media_type_copper: 1923 E1000_WRITE_REG(hw, E1000_LEDCTL, hw->mac.ledctl_mode1); 1924 break; 1925 default: 1926 break; 1927 } 1928 1929 return E1000_SUCCESS; 1930 } 1931 1932 /** 1933 * e1000_set_pcie_no_snoop_generic - Set PCI-express capabilities 1934 * @hw: pointer to the HW structure 1935 * @no_snoop: bitmap of snoop events 1936 * 1937 * Set the PCI-express register to snoop for events enabled in 'no_snoop'. 1938 **/ 1939 void e1000_set_pcie_no_snoop_generic(struct e1000_hw *hw, u32 no_snoop) 1940 { 1941 u32 gcr; 1942 1943 DEBUGFUNC("e1000_set_pcie_no_snoop_generic"); 1944 1945 if (hw->bus.type != e1000_bus_type_pci_express) 1946 return; 1947 1948 if (no_snoop) { 1949 gcr = E1000_READ_REG(hw, E1000_GCR); 1950 gcr &= ~(PCIE_NO_SNOOP_ALL); 1951 gcr |= no_snoop; 1952 E1000_WRITE_REG(hw, E1000_GCR, gcr); 1953 } 1954 } 1955 1956 /** 1957 * e1000_disable_pcie_master_generic - Disables PCI-express master access 1958 * @hw: pointer to the HW structure 1959 * 1960 * Returns E1000_SUCCESS if successful, else returns -10 1961 * (-E1000_ERR_MASTER_REQUESTS_PENDING) if master disable bit has not caused 1962 * the master requests to be disabled. 1963 * 1964 * Disables PCI-Express master access and verifies there are no pending 1965 * requests. 1966 **/ 1967 s32 e1000_disable_pcie_master_generic(struct e1000_hw *hw) 1968 { 1969 u32 ctrl; 1970 s32 timeout = MASTER_DISABLE_TIMEOUT; 1971 1972 DEBUGFUNC("e1000_disable_pcie_master_generic"); 1973 1974 if (hw->bus.type != e1000_bus_type_pci_express) 1975 return E1000_SUCCESS; 1976 1977 ctrl = E1000_READ_REG(hw, E1000_CTRL); 1978 ctrl |= E1000_CTRL_GIO_MASTER_DISABLE; 1979 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); 1980 1981 while (timeout) { 1982 if (!(E1000_READ_REG(hw, E1000_STATUS) & 1983 E1000_STATUS_GIO_MASTER_ENABLE)) 1984 break; 1985 usec_delay(100); 1986 timeout--; 1987 } 1988 1989 if (!timeout) { 1990 DEBUGOUT("Master requests are pending.\n"); 1991 return -E1000_ERR_MASTER_REQUESTS_PENDING; 1992 } 1993 1994 return E1000_SUCCESS; 1995 } 1996 1997 /** 1998 * e1000_reset_adaptive_generic - Reset Adaptive Interframe Spacing 1999 * @hw: pointer to the HW structure 2000 * 2001 * Reset the Adaptive Interframe Spacing throttle to default values. 2002 **/ 2003 void e1000_reset_adaptive_generic(struct e1000_hw *hw) 2004 { 2005 struct e1000_mac_info *mac = &hw->mac; 2006 2007 DEBUGFUNC("e1000_reset_adaptive_generic"); 2008 2009 if (!mac->adaptive_ifs) { 2010 DEBUGOUT("Not in Adaptive IFS mode!\n"); 2011 return; 2012 } 2013 2014 mac->current_ifs_val = 0; 2015 mac->ifs_min_val = IFS_MIN; 2016 mac->ifs_max_val = IFS_MAX; 2017 mac->ifs_step_size = IFS_STEP; 2018 mac->ifs_ratio = IFS_RATIO; 2019 2020 mac->in_ifs_mode = FALSE; 2021 E1000_WRITE_REG(hw, E1000_AIT, 0); 2022 } 2023 2024 /** 2025 * e1000_update_adaptive_generic - Update Adaptive Interframe Spacing 2026 * @hw: pointer to the HW structure 2027 * 2028 * Update the Adaptive Interframe Spacing Throttle value based on the 2029 * time between transmitted packets and time between collisions. 2030 **/ 2031 void e1000_update_adaptive_generic(struct e1000_hw *hw) 2032 { 2033 struct e1000_mac_info *mac = &hw->mac; 2034 2035 DEBUGFUNC("e1000_update_adaptive_generic"); 2036 2037 if (!mac->adaptive_ifs) { 2038 DEBUGOUT("Not in Adaptive IFS mode!\n"); 2039 return; 2040 } 2041 2042 if ((mac->collision_delta * mac->ifs_ratio) > mac->tx_packet_delta) { 2043 if (mac->tx_packet_delta > MIN_NUM_XMITS) { 2044 mac->in_ifs_mode = TRUE; 2045 if (mac->current_ifs_val < mac->ifs_max_val) { 2046 if (!mac->current_ifs_val) 2047 mac->current_ifs_val = mac->ifs_min_val; 2048 else 2049 mac->current_ifs_val += 2050 mac->ifs_step_size; 2051 E1000_WRITE_REG(hw, E1000_AIT, 2052 mac->current_ifs_val); 2053 } 2054 } 2055 } else { 2056 if (mac->in_ifs_mode && 2057 (mac->tx_packet_delta <= MIN_NUM_XMITS)) { 2058 mac->current_ifs_val = 0; 2059 mac->in_ifs_mode = FALSE; 2060 E1000_WRITE_REG(hw, E1000_AIT, 0); 2061 } 2062 } 2063 } 2064 2065 /** 2066 * e1000_validate_mdi_setting_generic - Verify MDI/MDIx settings 2067 * @hw: pointer to the HW structure 2068 * 2069 * Verify that when not using auto-negotiation that MDI/MDIx is correctly 2070 * set, which is forced to MDI mode only. 2071 **/ 2072 static s32 e1000_validate_mdi_setting_generic(struct e1000_hw *hw) 2073 { 2074 DEBUGFUNC("e1000_validate_mdi_setting_generic"); 2075 2076 if (!hw->mac.autoneg && (hw->phy.mdix == 0 || hw->phy.mdix == 3)) { 2077 DEBUGOUT("Invalid MDI setting detected\n"); 2078 hw->phy.mdix = 1; 2079 return -E1000_ERR_CONFIG; 2080 } 2081 2082 return E1000_SUCCESS; 2083 } 2084 2085 /** 2086 * e1000_write_8bit_ctrl_reg_generic - Write a 8bit CTRL register 2087 * @hw: pointer to the HW structure 2088 * @reg: 32bit register offset such as E1000_SCTL 2089 * @offset: register offset to write to 2090 * @data: data to write at register offset 2091 * 2092 * Writes an address/data control type register. There are several of these 2093 * and they all have the format address << 8 | data and bit 31 is polled for 2094 * completion. 2095 **/ 2096 s32 e1000_write_8bit_ctrl_reg_generic(struct e1000_hw *hw, u32 reg, 2097 u32 offset, u8 data) 2098 { 2099 u32 i, regvalue = 0; 2100 2101 DEBUGFUNC("e1000_write_8bit_ctrl_reg_generic"); 2102 2103 /* Set up the address and data */ 2104 regvalue = ((u32)data) | (offset << E1000_GEN_CTL_ADDRESS_SHIFT); 2105 E1000_WRITE_REG(hw, reg, regvalue); 2106 2107 /* Poll the ready bit to see if the MDI read completed */ 2108 for (i = 0; i < E1000_GEN_POLL_TIMEOUT; i++) { 2109 usec_delay(5); 2110 regvalue = E1000_READ_REG(hw, reg); 2111 if (regvalue & E1000_GEN_CTL_READY) 2112 break; 2113 } 2114 if (!(regvalue & E1000_GEN_CTL_READY)) { 2115 DEBUGOUT1("Reg %08x did not indicate ready\n", reg); 2116 return -E1000_ERR_PHY; 2117 } 2118 2119 return E1000_SUCCESS; 2120 } 2121