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