diff options
Diffstat (limited to 'drivers/net/e1000e/lib.c')
-rw-r--r-- | drivers/net/e1000e/lib.c | 213 |
1 files changed, 134 insertions, 79 deletions
diff --git a/drivers/net/e1000e/lib.c b/drivers/net/e1000e/lib.c index 073934c7f73a..b7eaff0a20ba 100644 --- a/drivers/net/e1000e/lib.c +++ b/drivers/net/e1000e/lib.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | Intel PRO/1000 Linux driver | 3 | Intel PRO/1000 Linux driver |
4 | Copyright(c) 1999 - 2007 Intel Corporation. | 4 | Copyright(c) 1999 - 2008 Intel Corporation. |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify it | 6 | This program is free software; you can redistribute it and/or modify it |
7 | under the terms and conditions of the GNU General Public License, | 7 | under the terms and conditions of the GNU General Public License, |
@@ -43,8 +43,8 @@ enum e1000_mng_mode { | |||
43 | 43 | ||
44 | #define E1000_FACTPS_MNGCG 0x20000000 | 44 | #define E1000_FACTPS_MNGCG 0x20000000 |
45 | 45 | ||
46 | #define E1000_IAMT_SIGNATURE 0x544D4149 /* Intel(R) Active Management | 46 | /* Intel(R) Active Management Technology signature */ |
47 | * Technology signature */ | 47 | #define E1000_IAMT_SIGNATURE 0x544D4149 |
48 | 48 | ||
49 | /** | 49 | /** |
50 | * e1000e_get_bus_info_pcie - Get PCIe bus information | 50 | * e1000e_get_bus_info_pcie - Get PCIe bus information |
@@ -142,7 +142,8 @@ void e1000e_rar_set(struct e1000_hw *hw, u8 *addr, u32 index) | |||
142 | { | 142 | { |
143 | u32 rar_low, rar_high; | 143 | u32 rar_low, rar_high; |
144 | 144 | ||
145 | /* HW expects these in little endian so we reverse the byte order | 145 | /* |
146 | * HW expects these in little endian so we reverse the byte order | ||
146 | * from network order (big endian) to little endian | 147 | * from network order (big endian) to little endian |
147 | */ | 148 | */ |
148 | rar_low = ((u32) addr[0] | | 149 | rar_low = ((u32) addr[0] | |
@@ -171,7 +172,8 @@ static void e1000_mta_set(struct e1000_hw *hw, u32 hash_value) | |||
171 | { | 172 | { |
172 | u32 hash_bit, hash_reg, mta; | 173 | u32 hash_bit, hash_reg, mta; |
173 | 174 | ||
174 | /* The MTA is a register array of 32-bit registers. It is | 175 | /* |
176 | * The MTA is a register array of 32-bit registers. It is | ||
175 | * treated like an array of (32*mta_reg_count) bits. We want to | 177 | * treated like an array of (32*mta_reg_count) bits. We want to |
176 | * set bit BitArray[hash_value]. So we figure out what register | 178 | * set bit BitArray[hash_value]. So we figure out what register |
177 | * the bit is in, read it, OR in the new bit, then write | 179 | * the bit is in, read it, OR in the new bit, then write |
@@ -208,12 +210,15 @@ static u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) | |||
208 | /* Register count multiplied by bits per register */ | 210 | /* Register count multiplied by bits per register */ |
209 | hash_mask = (hw->mac.mta_reg_count * 32) - 1; | 211 | hash_mask = (hw->mac.mta_reg_count * 32) - 1; |
210 | 212 | ||
211 | /* For a mc_filter_type of 0, bit_shift is the number of left-shifts | 213 | /* |
212 | * where 0xFF would still fall within the hash mask. */ | 214 | * For a mc_filter_type of 0, bit_shift is the number of left-shifts |
215 | * where 0xFF would still fall within the hash mask. | ||
216 | */ | ||
213 | while (hash_mask >> bit_shift != 0xFF) | 217 | while (hash_mask >> bit_shift != 0xFF) |
214 | bit_shift++; | 218 | bit_shift++; |
215 | 219 | ||
216 | /* The portion of the address that is used for the hash table | 220 | /* |
221 | * The portion of the address that is used for the hash table | ||
217 | * is determined by the mc_filter_type setting. | 222 | * is determined by the mc_filter_type setting. |
218 | * The algorithm is such that there is a total of 8 bits of shifting. | 223 | * The algorithm is such that there is a total of 8 bits of shifting. |
219 | * The bit_shift for a mc_filter_type of 0 represents the number of | 224 | * The bit_shift for a mc_filter_type of 0 represents the number of |
@@ -224,8 +229,8 @@ static u32 e1000_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) | |||
224 | * cases are a variation of this algorithm...essentially raising the | 229 | * cases are a variation of this algorithm...essentially raising the |
225 | * number of bits to shift mc_addr[5] left, while still keeping the | 230 | * number of bits to shift mc_addr[5] left, while still keeping the |
226 | * 8-bit shifting total. | 231 | * 8-bit shifting total. |
227 | */ | 232 | * |
228 | /* For example, given the following Destination MAC Address and an | 233 | * For example, given the following Destination MAC Address and an |
229 | * mta register count of 128 (thus a 4096-bit vector and 0xFFF mask), | 234 | * mta register count of 128 (thus a 4096-bit vector and 0xFFF mask), |
230 | * we can see that the bit_shift for case 0 is 4. These are the hash | 235 | * we can see that the bit_shift for case 0 is 4. These are the hash |
231 | * values resulting from each mc_filter_type... | 236 | * values resulting from each mc_filter_type... |
@@ -279,7 +284,8 @@ void e1000e_mc_addr_list_update_generic(struct e1000_hw *hw, | |||
279 | u32 hash_value; | 284 | u32 hash_value; |
280 | u32 i; | 285 | u32 i; |
281 | 286 | ||
282 | /* Load the first set of multicast addresses into the exact | 287 | /* |
288 | * Load the first set of multicast addresses into the exact | ||
283 | * filters (RAR). If there are not enough to fill the RAR | 289 | * filters (RAR). If there are not enough to fill the RAR |
284 | * array, clear the filters. | 290 | * array, clear the filters. |
285 | */ | 291 | */ |
@@ -375,7 +381,8 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw) | |||
375 | s32 ret_val; | 381 | s32 ret_val; |
376 | bool link; | 382 | bool link; |
377 | 383 | ||
378 | /* We only want to go out to the PHY registers to see if Auto-Neg | 384 | /* |
385 | * We only want to go out to the PHY registers to see if Auto-Neg | ||
379 | * has completed and/or if our link status has changed. The | 386 | * has completed and/or if our link status has changed. The |
380 | * get_link_status flag is set upon receiving a Link Status | 387 | * get_link_status flag is set upon receiving a Link Status |
381 | * Change or Rx Sequence Error interrupt. | 388 | * Change or Rx Sequence Error interrupt. |
@@ -383,7 +390,8 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw) | |||
383 | if (!mac->get_link_status) | 390 | if (!mac->get_link_status) |
384 | return 0; | 391 | return 0; |
385 | 392 | ||
386 | /* First we want to see if the MII Status Register reports | 393 | /* |
394 | * First we want to see if the MII Status Register reports | ||
387 | * link. If so, then we want to get the current speed/duplex | 395 | * link. If so, then we want to get the current speed/duplex |
388 | * of the PHY. | 396 | * of the PHY. |
389 | */ | 397 | */ |
@@ -396,11 +404,14 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw) | |||
396 | 404 | ||
397 | mac->get_link_status = 0; | 405 | mac->get_link_status = 0; |
398 | 406 | ||
399 | /* Check if there was DownShift, must be checked | 407 | /* |
400 | * immediately after link-up */ | 408 | * Check if there was DownShift, must be checked |
409 | * immediately after link-up | ||
410 | */ | ||
401 | e1000e_check_downshift(hw); | 411 | e1000e_check_downshift(hw); |
402 | 412 | ||
403 | /* If we are forcing speed/duplex, then we simply return since | 413 | /* |
414 | * If we are forcing speed/duplex, then we simply return since | ||
404 | * we have already determined whether we have link or not. | 415 | * we have already determined whether we have link or not. |
405 | */ | 416 | */ |
406 | if (!mac->autoneg) { | 417 | if (!mac->autoneg) { |
@@ -408,13 +419,15 @@ s32 e1000e_check_for_copper_link(struct e1000_hw *hw) | |||
408 | return ret_val; | 419 | return ret_val; |
409 | } | 420 | } |
410 | 421 | ||
411 | /* Auto-Neg is enabled. Auto Speed Detection takes care | 422 | /* |
423 | * Auto-Neg is enabled. Auto Speed Detection takes care | ||
412 | * of MAC speed/duplex configuration. So we only need to | 424 | * of MAC speed/duplex configuration. So we only need to |
413 | * configure Collision Distance in the MAC. | 425 | * configure Collision Distance in the MAC. |
414 | */ | 426 | */ |
415 | e1000e_config_collision_dist(hw); | 427 | e1000e_config_collision_dist(hw); |
416 | 428 | ||
417 | /* Configure Flow Control now that Auto-Neg has completed. | 429 | /* |
430 | * Configure Flow Control now that Auto-Neg has completed. | ||
418 | * First, we need to restore the desired flow control | 431 | * First, we need to restore the desired flow control |
419 | * settings because we may have had to re-autoneg with a | 432 | * settings because we may have had to re-autoneg with a |
420 | * different link partner. | 433 | * different link partner. |
@@ -446,7 +459,8 @@ s32 e1000e_check_for_fiber_link(struct e1000_hw *hw) | |||
446 | status = er32(STATUS); | 459 | status = er32(STATUS); |
447 | rxcw = er32(RXCW); | 460 | rxcw = er32(RXCW); |
448 | 461 | ||
449 | /* If we don't have link (auto-negotiation failed or link partner | 462 | /* |
463 | * If we don't have link (auto-negotiation failed or link partner | ||
450 | * cannot auto-negotiate), the cable is plugged in (we have signal), | 464 | * cannot auto-negotiate), the cable is plugged in (we have signal), |
451 | * and our link partner is not trying to auto-negotiate with us (we | 465 | * and our link partner is not trying to auto-negotiate with us (we |
452 | * are receiving idles or data), we need to force link up. We also | 466 | * are receiving idles or data), we need to force link up. We also |
@@ -477,7 +491,8 @@ s32 e1000e_check_for_fiber_link(struct e1000_hw *hw) | |||
477 | return ret_val; | 491 | return ret_val; |
478 | } | 492 | } |
479 | } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) { | 493 | } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) { |
480 | /* If we are forcing link and we are receiving /C/ ordered | 494 | /* |
495 | * If we are forcing link and we are receiving /C/ ordered | ||
481 | * sets, re-enable auto-negotiation in the TXCW register | 496 | * sets, re-enable auto-negotiation in the TXCW register |
482 | * and disable forced link in the Device Control register | 497 | * and disable forced link in the Device Control register |
483 | * in an attempt to auto-negotiate with our link partner. | 498 | * in an attempt to auto-negotiate with our link partner. |
@@ -511,7 +526,8 @@ s32 e1000e_check_for_serdes_link(struct e1000_hw *hw) | |||
511 | status = er32(STATUS); | 526 | status = er32(STATUS); |
512 | rxcw = er32(RXCW); | 527 | rxcw = er32(RXCW); |
513 | 528 | ||
514 | /* If we don't have link (auto-negotiation failed or link partner | 529 | /* |
530 | * If we don't have link (auto-negotiation failed or link partner | ||
515 | * cannot auto-negotiate), and our link partner is not trying to | 531 | * cannot auto-negotiate), and our link partner is not trying to |
516 | * auto-negotiate with us (we are receiving idles or data), | 532 | * auto-negotiate with us (we are receiving idles or data), |
517 | * we need to force link up. We also need to give auto-negotiation | 533 | * we need to force link up. We also need to give auto-negotiation |
@@ -540,7 +556,8 @@ s32 e1000e_check_for_serdes_link(struct e1000_hw *hw) | |||
540 | return ret_val; | 556 | return ret_val; |
541 | } | 557 | } |
542 | } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) { | 558 | } else if ((ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) { |
543 | /* If we are forcing link and we are receiving /C/ ordered | 559 | /* |
560 | * If we are forcing link and we are receiving /C/ ordered | ||
544 | * sets, re-enable auto-negotiation in the TXCW register | 561 | * sets, re-enable auto-negotiation in the TXCW register |
545 | * and disable forced link in the Device Control register | 562 | * and disable forced link in the Device Control register |
546 | * in an attempt to auto-negotiate with our link partner. | 563 | * in an attempt to auto-negotiate with our link partner. |
@@ -551,7 +568,8 @@ s32 e1000e_check_for_serdes_link(struct e1000_hw *hw) | |||
551 | 568 | ||
552 | mac->serdes_has_link = 1; | 569 | mac->serdes_has_link = 1; |
553 | } else if (!(E1000_TXCW_ANE & er32(TXCW))) { | 570 | } else if (!(E1000_TXCW_ANE & er32(TXCW))) { |
554 | /* If we force link for non-auto-negotiation switch, check | 571 | /* |
572 | * If we force link for non-auto-negotiation switch, check | ||
555 | * link status based on MAC synchronization for internal | 573 | * link status based on MAC synchronization for internal |
556 | * serdes media type. | 574 | * serdes media type. |
557 | */ | 575 | */ |
@@ -589,7 +607,8 @@ static s32 e1000_set_default_fc_generic(struct e1000_hw *hw) | |||
589 | s32 ret_val; | 607 | s32 ret_val; |
590 | u16 nvm_data; | 608 | u16 nvm_data; |
591 | 609 | ||
592 | /* Read and store word 0x0F of the EEPROM. This word contains bits | 610 | /* |
611 | * Read and store word 0x0F of the EEPROM. This word contains bits | ||
593 | * that determine the hardware's default PAUSE (flow control) mode, | 612 | * that determine the hardware's default PAUSE (flow control) mode, |
594 | * a bit that determines whether the HW defaults to enabling or | 613 | * a bit that determines whether the HW defaults to enabling or |
595 | * disabling auto-negotiation, and the direction of the | 614 | * disabling auto-negotiation, and the direction of the |
@@ -630,7 +649,8 @@ s32 e1000e_setup_link(struct e1000_hw *hw) | |||
630 | struct e1000_mac_info *mac = &hw->mac; | 649 | struct e1000_mac_info *mac = &hw->mac; |
631 | s32 ret_val; | 650 | s32 ret_val; |
632 | 651 | ||
633 | /* In the case of the phy reset being blocked, we already have a link. | 652 | /* |
653 | * In the case of the phy reset being blocked, we already have a link. | ||
634 | * We do not need to set it up again. | 654 | * We do not need to set it up again. |
635 | */ | 655 | */ |
636 | if (e1000_check_reset_block(hw)) | 656 | if (e1000_check_reset_block(hw)) |
@@ -646,7 +666,8 @@ s32 e1000e_setup_link(struct e1000_hw *hw) | |||
646 | return ret_val; | 666 | return ret_val; |
647 | } | 667 | } |
648 | 668 | ||
649 | /* We want to save off the original Flow Control configuration just | 669 | /* |
670 | * We want to save off the original Flow Control configuration just | ||
650 | * in case we get disconnected and then reconnected into a different | 671 | * in case we get disconnected and then reconnected into a different |
651 | * hub or switch with different Flow Control capabilities. | 672 | * hub or switch with different Flow Control capabilities. |
652 | */ | 673 | */ |
@@ -659,7 +680,8 @@ s32 e1000e_setup_link(struct e1000_hw *hw) | |||
659 | if (ret_val) | 680 | if (ret_val) |
660 | return ret_val; | 681 | return ret_val; |
661 | 682 | ||
662 | /* Initialize the flow control address, type, and PAUSE timer | 683 | /* |
684 | * Initialize the flow control address, type, and PAUSE timer | ||
663 | * registers to their default values. This is done even if flow | 685 | * registers to their default values. This is done even if flow |
664 | * control is disabled, because it does not hurt anything to | 686 | * control is disabled, because it does not hurt anything to |
665 | * initialize these registers. | 687 | * initialize these registers. |
@@ -686,7 +708,8 @@ static s32 e1000_commit_fc_settings_generic(struct e1000_hw *hw) | |||
686 | struct e1000_mac_info *mac = &hw->mac; | 708 | struct e1000_mac_info *mac = &hw->mac; |
687 | u32 txcw; | 709 | u32 txcw; |
688 | 710 | ||
689 | /* Check for a software override of the flow control settings, and | 711 | /* |
712 | * Check for a software override of the flow control settings, and | ||
690 | * setup the device accordingly. If auto-negotiation is enabled, then | 713 | * setup the device accordingly. If auto-negotiation is enabled, then |
691 | * software will have to set the "PAUSE" bits to the correct value in | 714 | * software will have to set the "PAUSE" bits to the correct value in |
692 | * the Transmit Config Word Register (TXCW) and re-start auto- | 715 | * the Transmit Config Word Register (TXCW) and re-start auto- |
@@ -700,7 +723,7 @@ static s32 e1000_commit_fc_settings_generic(struct e1000_hw *hw) | |||
700 | * but not send pause frames). | 723 | * but not send pause frames). |
701 | * 2: Tx flow control is enabled (we can send pause frames but we | 724 | * 2: Tx flow control is enabled (we can send pause frames but we |
702 | * do not support receiving pause frames). | 725 | * do not support receiving pause frames). |
703 | * 3: Both Rx and TX flow control (symmetric) are enabled. | 726 | * 3: Both Rx and Tx flow control (symmetric) are enabled. |
704 | */ | 727 | */ |
705 | switch (mac->fc) { | 728 | switch (mac->fc) { |
706 | case e1000_fc_none: | 729 | case e1000_fc_none: |
@@ -708,23 +731,26 @@ static s32 e1000_commit_fc_settings_generic(struct e1000_hw *hw) | |||
708 | txcw = (E1000_TXCW_ANE | E1000_TXCW_FD); | 731 | txcw = (E1000_TXCW_ANE | E1000_TXCW_FD); |
709 | break; | 732 | break; |
710 | case e1000_fc_rx_pause: | 733 | case e1000_fc_rx_pause: |
711 | /* RX Flow control is enabled and TX Flow control is disabled | 734 | /* |
735 | * Rx Flow control is enabled and Tx Flow control is disabled | ||
712 | * by a software over-ride. Since there really isn't a way to | 736 | * by a software over-ride. Since there really isn't a way to |
713 | * advertise that we are capable of RX Pause ONLY, we will | 737 | * advertise that we are capable of Rx Pause ONLY, we will |
714 | * advertise that we support both symmetric and asymmetric RX | 738 | * advertise that we support both symmetric and asymmetric Rx |
715 | * PAUSE. Later, we will disable the adapter's ability to send | 739 | * PAUSE. Later, we will disable the adapter's ability to send |
716 | * PAUSE frames. | 740 | * PAUSE frames. |
717 | */ | 741 | */ |
718 | txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK); | 742 | txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK); |
719 | break; | 743 | break; |
720 | case e1000_fc_tx_pause: | 744 | case e1000_fc_tx_pause: |
721 | /* TX Flow control is enabled, and RX Flow control is disabled, | 745 | /* |
746 | * Tx Flow control is enabled, and Rx Flow control is disabled, | ||
722 | * by a software over-ride. | 747 | * by a software over-ride. |
723 | */ | 748 | */ |
724 | txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR); | 749 | txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR); |
725 | break; | 750 | break; |
726 | case e1000_fc_full: | 751 | case e1000_fc_full: |
727 | /* Flow control (both RX and TX) is enabled by a software | 752 | /* |
753 | * Flow control (both Rx and Tx) is enabled by a software | ||
728 | * over-ride. | 754 | * over-ride. |
729 | */ | 755 | */ |
730 | txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK); | 756 | txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK); |
@@ -754,7 +780,8 @@ static s32 e1000_poll_fiber_serdes_link_generic(struct e1000_hw *hw) | |||
754 | u32 i, status; | 780 | u32 i, status; |
755 | s32 ret_val; | 781 | s32 ret_val; |
756 | 782 | ||
757 | /* If we have a signal (the cable is plugged in, or assumed true for | 783 | /* |
784 | * If we have a signal (the cable is plugged in, or assumed true for | ||
758 | * serdes media) then poll for a "Link-Up" indication in the Device | 785 | * serdes media) then poll for a "Link-Up" indication in the Device |
759 | * Status Register. Time-out if a link isn't seen in 500 milliseconds | 786 | * Status Register. Time-out if a link isn't seen in 500 milliseconds |
760 | * seconds (Auto-negotiation should complete in less than 500 | 787 | * seconds (Auto-negotiation should complete in less than 500 |
@@ -769,7 +796,8 @@ static s32 e1000_poll_fiber_serdes_link_generic(struct e1000_hw *hw) | |||
769 | if (i == FIBER_LINK_UP_LIMIT) { | 796 | if (i == FIBER_LINK_UP_LIMIT) { |
770 | hw_dbg(hw, "Never got a valid link from auto-neg!!!\n"); | 797 | hw_dbg(hw, "Never got a valid link from auto-neg!!!\n"); |
771 | mac->autoneg_failed = 1; | 798 | mac->autoneg_failed = 1; |
772 | /* AutoNeg failed to achieve a link, so we'll call | 799 | /* |
800 | * AutoNeg failed to achieve a link, so we'll call | ||
773 | * mac->check_for_link. This routine will force the | 801 | * mac->check_for_link. This routine will force the |
774 | * link up if we detect a signal. This will allow us to | 802 | * link up if we detect a signal. This will allow us to |
775 | * communicate with non-autonegotiating link partners. | 803 | * communicate with non-autonegotiating link partners. |
@@ -811,7 +839,8 @@ s32 e1000e_setup_fiber_serdes_link(struct e1000_hw *hw) | |||
811 | if (ret_val) | 839 | if (ret_val) |
812 | return ret_val; | 840 | return ret_val; |
813 | 841 | ||
814 | /* Since auto-negotiation is enabled, take the link out of reset (the | 842 | /* |
843 | * Since auto-negotiation is enabled, take the link out of reset (the | ||
815 | * link will be in reset, because we previously reset the chip). This | 844 | * link will be in reset, because we previously reset the chip). This |
816 | * will restart auto-negotiation. If auto-negotiation is successful | 845 | * will restart auto-negotiation. If auto-negotiation is successful |
817 | * then the link-up status bit will be set and the flow control enable | 846 | * then the link-up status bit will be set and the flow control enable |
@@ -823,7 +852,8 @@ s32 e1000e_setup_fiber_serdes_link(struct e1000_hw *hw) | |||
823 | e1e_flush(); | 852 | e1e_flush(); |
824 | msleep(1); | 853 | msleep(1); |
825 | 854 | ||
826 | /* For these adapters, the SW defineable pin 1 is set when the optics | 855 | /* |
856 | * For these adapters, the SW definable pin 1 is set when the optics | ||
827 | * detect a signal. If we have a signal, then poll for a "Link-Up" | 857 | * detect a signal. If we have a signal, then poll for a "Link-Up" |
828 | * indication. | 858 | * indication. |
829 | */ | 859 | */ |
@@ -864,21 +894,23 @@ void e1000e_config_collision_dist(struct e1000_hw *hw) | |||
864 | * | 894 | * |
865 | * Sets the flow control high/low threshold (watermark) registers. If | 895 | * Sets the flow control high/low threshold (watermark) registers. If |
866 | * flow control XON frame transmission is enabled, then set XON frame | 896 | * flow control XON frame transmission is enabled, then set XON frame |
867 | * tansmission as well. | 897 | * transmission as well. |
868 | **/ | 898 | **/ |
869 | s32 e1000e_set_fc_watermarks(struct e1000_hw *hw) | 899 | s32 e1000e_set_fc_watermarks(struct e1000_hw *hw) |
870 | { | 900 | { |
871 | struct e1000_mac_info *mac = &hw->mac; | 901 | struct e1000_mac_info *mac = &hw->mac; |
872 | u32 fcrtl = 0, fcrth = 0; | 902 | u32 fcrtl = 0, fcrth = 0; |
873 | 903 | ||
874 | /* Set the flow control receive threshold registers. Normally, | 904 | /* |
905 | * Set the flow control receive threshold registers. Normally, | ||
875 | * these registers will be set to a default threshold that may be | 906 | * these registers will be set to a default threshold that may be |
876 | * adjusted later by the driver's runtime code. However, if the | 907 | * adjusted later by the driver's runtime code. However, if the |
877 | * ability to transmit pause frames is not enabled, then these | 908 | * ability to transmit pause frames is not enabled, then these |
878 | * registers will be set to 0. | 909 | * registers will be set to 0. |
879 | */ | 910 | */ |
880 | if (mac->fc & e1000_fc_tx_pause) { | 911 | if (mac->fc & e1000_fc_tx_pause) { |
881 | /* We need to set up the Receive Threshold high and low water | 912 | /* |
913 | * We need to set up the Receive Threshold high and low water | ||
882 | * marks as well as (optionally) enabling the transmission of | 914 | * marks as well as (optionally) enabling the transmission of |
883 | * XON frames. | 915 | * XON frames. |
884 | */ | 916 | */ |
@@ -909,7 +941,8 @@ s32 e1000e_force_mac_fc(struct e1000_hw *hw) | |||
909 | 941 | ||
910 | ctrl = er32(CTRL); | 942 | ctrl = er32(CTRL); |
911 | 943 | ||
912 | /* Because we didn't get link via the internal auto-negotiation | 944 | /* |
945 | * Because we didn't get link via the internal auto-negotiation | ||
913 | * mechanism (we either forced link or we got link via PHY | 946 | * mechanism (we either forced link or we got link via PHY |
914 | * auto-neg), we have to manually enable/disable transmit an | 947 | * auto-neg), we have to manually enable/disable transmit an |
915 | * receive flow control. | 948 | * receive flow control. |
@@ -923,7 +956,7 @@ s32 e1000e_force_mac_fc(struct e1000_hw *hw) | |||
923 | * frames but not send pause frames). | 956 | * frames but not send pause frames). |
924 | * 2: Tx flow control is enabled (we can send pause frames | 957 | * 2: Tx flow control is enabled (we can send pause frames |
925 | * frames but we do not receive pause frames). | 958 | * frames but we do not receive pause frames). |
926 | * 3: Both Rx and TX flow control (symmetric) is enabled. | 959 | * 3: Both Rx and Tx flow control (symmetric) is enabled. |
927 | * other: No other values should be possible at this point. | 960 | * other: No other values should be possible at this point. |
928 | */ | 961 | */ |
929 | hw_dbg(hw, "mac->fc = %u\n", mac->fc); | 962 | hw_dbg(hw, "mac->fc = %u\n", mac->fc); |
@@ -970,7 +1003,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
970 | u16 mii_status_reg, mii_nway_adv_reg, mii_nway_lp_ability_reg; | 1003 | u16 mii_status_reg, mii_nway_adv_reg, mii_nway_lp_ability_reg; |
971 | u16 speed, duplex; | 1004 | u16 speed, duplex; |
972 | 1005 | ||
973 | /* Check for the case where we have fiber media and auto-neg failed | 1006 | /* |
1007 | * Check for the case where we have fiber media and auto-neg failed | ||
974 | * so we had to force link. In this case, we need to force the | 1008 | * so we had to force link. In this case, we need to force the |
975 | * configuration of the MAC to match the "fc" parameter. | 1009 | * configuration of the MAC to match the "fc" parameter. |
976 | */ | 1010 | */ |
@@ -988,13 +1022,15 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
988 | return ret_val; | 1022 | return ret_val; |
989 | } | 1023 | } |
990 | 1024 | ||
991 | /* Check for the case where we have copper media and auto-neg is | 1025 | /* |
1026 | * Check for the case where we have copper media and auto-neg is | ||
992 | * enabled. In this case, we need to check and see if Auto-Neg | 1027 | * enabled. In this case, we need to check and see if Auto-Neg |
993 | * has completed, and if so, how the PHY and link partner has | 1028 | * has completed, and if so, how the PHY and link partner has |
994 | * flow control configured. | 1029 | * flow control configured. |
995 | */ | 1030 | */ |
996 | if ((hw->media_type == e1000_media_type_copper) && mac->autoneg) { | 1031 | if ((hw->media_type == e1000_media_type_copper) && mac->autoneg) { |
997 | /* Read the MII Status Register and check to see if AutoNeg | 1032 | /* |
1033 | * Read the MII Status Register and check to see if AutoNeg | ||
998 | * has completed. We read this twice because this reg has | 1034 | * has completed. We read this twice because this reg has |
999 | * some "sticky" (latched) bits. | 1035 | * some "sticky" (latched) bits. |
1000 | */ | 1036 | */ |
@@ -1011,7 +1047,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1011 | return ret_val; | 1047 | return ret_val; |
1012 | } | 1048 | } |
1013 | 1049 | ||
1014 | /* The AutoNeg process has completed, so we now need to | 1050 | /* |
1051 | * The AutoNeg process has completed, so we now need to | ||
1015 | * read both the Auto Negotiation Advertisement | 1052 | * read both the Auto Negotiation Advertisement |
1016 | * Register (Address 4) and the Auto_Negotiation Base | 1053 | * Register (Address 4) and the Auto_Negotiation Base |
1017 | * Page Ability Register (Address 5) to determine how | 1054 | * Page Ability Register (Address 5) to determine how |
@@ -1024,7 +1061,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1024 | if (ret_val) | 1061 | if (ret_val) |
1025 | return ret_val; | 1062 | return ret_val; |
1026 | 1063 | ||
1027 | /* Two bits in the Auto Negotiation Advertisement Register | 1064 | /* |
1065 | * Two bits in the Auto Negotiation Advertisement Register | ||
1028 | * (Address 4) and two bits in the Auto Negotiation Base | 1066 | * (Address 4) and two bits in the Auto Negotiation Base |
1029 | * Page Ability Register (Address 5) determine flow control | 1067 | * Page Ability Register (Address 5) determine flow control |
1030 | * for both the PHY and the link partner. The following | 1068 | * for both the PHY and the link partner. The following |
@@ -1045,8 +1083,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1045 | * 1 | 1 | 0 | 0 | e1000_fc_none | 1083 | * 1 | 1 | 0 | 0 | e1000_fc_none |
1046 | * 1 | 1 | 0 | 1 | e1000_fc_rx_pause | 1084 | * 1 | 1 | 0 | 1 | e1000_fc_rx_pause |
1047 | * | 1085 | * |
1048 | */ | 1086 | * |
1049 | /* Are both PAUSE bits set to 1? If so, this implies | 1087 | * Are both PAUSE bits set to 1? If so, this implies |
1050 | * Symmetric Flow Control is enabled at both ends. The | 1088 | * Symmetric Flow Control is enabled at both ends. The |
1051 | * ASM_DIR bits are irrelevant per the spec. | 1089 | * ASM_DIR bits are irrelevant per the spec. |
1052 | * | 1090 | * |
@@ -1060,9 +1098,10 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1060 | */ | 1098 | */ |
1061 | if ((mii_nway_adv_reg & NWAY_AR_PAUSE) && | 1099 | if ((mii_nway_adv_reg & NWAY_AR_PAUSE) && |
1062 | (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) { | 1100 | (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) { |
1063 | /* Now we need to check if the user selected RX ONLY | 1101 | /* |
1102 | * Now we need to check if the user selected Rx ONLY | ||
1064 | * of pause frames. In this case, we had to advertise | 1103 | * of pause frames. In this case, we had to advertise |
1065 | * FULL flow control because we could not advertise RX | 1104 | * FULL flow control because we could not advertise Rx |
1066 | * ONLY. Hence, we must now check to see if we need to | 1105 | * ONLY. Hence, we must now check to see if we need to |
1067 | * turn OFF the TRANSMISSION of PAUSE frames. | 1106 | * turn OFF the TRANSMISSION of PAUSE frames. |
1068 | */ | 1107 | */ |
@@ -1075,7 +1114,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1075 | "RX PAUSE frames only.\r\n"); | 1114 | "RX PAUSE frames only.\r\n"); |
1076 | } | 1115 | } |
1077 | } | 1116 | } |
1078 | /* For receiving PAUSE frames ONLY. | 1117 | /* |
1118 | * For receiving PAUSE frames ONLY. | ||
1079 | * | 1119 | * |
1080 | * LOCAL DEVICE | LINK PARTNER | 1120 | * LOCAL DEVICE | LINK PARTNER |
1081 | * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result | 1121 | * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result |
@@ -1090,7 +1130,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1090 | mac->fc = e1000_fc_tx_pause; | 1130 | mac->fc = e1000_fc_tx_pause; |
1091 | hw_dbg(hw, "Flow Control = TX PAUSE frames only.\r\n"); | 1131 | hw_dbg(hw, "Flow Control = TX PAUSE frames only.\r\n"); |
1092 | } | 1132 | } |
1093 | /* For transmitting PAUSE frames ONLY. | 1133 | /* |
1134 | * For transmitting PAUSE frames ONLY. | ||
1094 | * | 1135 | * |
1095 | * LOCAL DEVICE | LINK PARTNER | 1136 | * LOCAL DEVICE | LINK PARTNER |
1096 | * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result | 1137 | * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result |
@@ -1113,7 +1154,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1113 | hw_dbg(hw, "Flow Control = NONE.\r\n"); | 1154 | hw_dbg(hw, "Flow Control = NONE.\r\n"); |
1114 | } | 1155 | } |
1115 | 1156 | ||
1116 | /* Now we need to do one last check... If we auto- | 1157 | /* |
1158 | * Now we need to do one last check... If we auto- | ||
1117 | * negotiated to HALF DUPLEX, flow control should not be | 1159 | * negotiated to HALF DUPLEX, flow control should not be |
1118 | * enabled per IEEE 802.3 spec. | 1160 | * enabled per IEEE 802.3 spec. |
1119 | */ | 1161 | */ |
@@ -1126,7 +1168,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1126 | if (duplex == HALF_DUPLEX) | 1168 | if (duplex == HALF_DUPLEX) |
1127 | mac->fc = e1000_fc_none; | 1169 | mac->fc = e1000_fc_none; |
1128 | 1170 | ||
1129 | /* Now we call a subroutine to actually force the MAC | 1171 | /* |
1172 | * Now we call a subroutine to actually force the MAC | ||
1130 | * controller to use the correct flow control settings. | 1173 | * controller to use the correct flow control settings. |
1131 | */ | 1174 | */ |
1132 | ret_val = e1000e_force_mac_fc(hw); | 1175 | ret_val = e1000e_force_mac_fc(hw); |
@@ -1398,8 +1441,10 @@ s32 e1000e_blink_led(struct e1000_hw *hw) | |||
1398 | ledctl_blink = E1000_LEDCTL_LED0_BLINK | | 1441 | ledctl_blink = E1000_LEDCTL_LED0_BLINK | |
1399 | (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT); | 1442 | (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT); |
1400 | } else { | 1443 | } else { |
1401 | /* set the blink bit for each LED that's "on" (0x0E) | 1444 | /* |
1402 | * in ledctl_mode2 */ | 1445 | * set the blink bit for each LED that's "on" (0x0E) |
1446 | * in ledctl_mode2 | ||
1447 | */ | ||
1403 | ledctl_blink = hw->mac.ledctl_mode2; | 1448 | ledctl_blink = hw->mac.ledctl_mode2; |
1404 | for (i = 0; i < 4; i++) | 1449 | for (i = 0; i < 4; i++) |
1405 | if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) == | 1450 | if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) == |
@@ -1562,8 +1607,7 @@ void e1000e_update_adaptive(struct e1000_hw *hw) | |||
1562 | else | 1607 | else |
1563 | mac->current_ifs_val += | 1608 | mac->current_ifs_val += |
1564 | mac->ifs_step_size; | 1609 | mac->ifs_step_size; |
1565 | ew32(AIT, | 1610 | ew32(AIT, mac->current_ifs_val); |
1566 | mac->current_ifs_val); | ||
1567 | } | 1611 | } |
1568 | } | 1612 | } |
1569 | } else { | 1613 | } else { |
@@ -1826,10 +1870,12 @@ static s32 e1000_ready_nvm_eeprom(struct e1000_hw *hw) | |||
1826 | udelay(1); | 1870 | udelay(1); |
1827 | timeout = NVM_MAX_RETRY_SPI; | 1871 | timeout = NVM_MAX_RETRY_SPI; |
1828 | 1872 | ||
1829 | /* Read "Status Register" repeatedly until the LSB is cleared. | 1873 | /* |
1874 | * Read "Status Register" repeatedly until the LSB is cleared. | ||
1830 | * The EEPROM will signal that the command has been completed | 1875 | * The EEPROM will signal that the command has been completed |
1831 | * by clearing bit 0 of the internal status register. If it's | 1876 | * by clearing bit 0 of the internal status register. If it's |
1832 | * not cleared within 'timeout', then error out. */ | 1877 | * not cleared within 'timeout', then error out. |
1878 | */ | ||
1833 | while (timeout) { | 1879 | while (timeout) { |
1834 | e1000_shift_out_eec_bits(hw, NVM_RDSR_OPCODE_SPI, | 1880 | e1000_shift_out_eec_bits(hw, NVM_RDSR_OPCODE_SPI, |
1835 | hw->nvm.opcode_bits); | 1881 | hw->nvm.opcode_bits); |
@@ -1866,8 +1912,10 @@ s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | |||
1866 | u32 i, eerd = 0; | 1912 | u32 i, eerd = 0; |
1867 | s32 ret_val = 0; | 1913 | s32 ret_val = 0; |
1868 | 1914 | ||
1869 | /* A check for invalid values: offset too large, too many words, | 1915 | /* |
1870 | * and not enough words. */ | 1916 | * A check for invalid values: offset too large, too many words, |
1917 | * too many words for the offset, and not enough words. | ||
1918 | */ | ||
1871 | if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || | 1919 | if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || |
1872 | (words == 0)) { | 1920 | (words == 0)) { |
1873 | hw_dbg(hw, "nvm parameter(s) out of bounds\n"); | 1921 | hw_dbg(hw, "nvm parameter(s) out of bounds\n"); |
@@ -1883,8 +1931,7 @@ s32 e1000e_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | |||
1883 | if (ret_val) | 1931 | if (ret_val) |
1884 | break; | 1932 | break; |
1885 | 1933 | ||
1886 | data[i] = (er32(EERD) >> | 1934 | data[i] = (er32(EERD) >> E1000_NVM_RW_REG_DATA); |
1887 | E1000_NVM_RW_REG_DATA); | ||
1888 | } | 1935 | } |
1889 | 1936 | ||
1890 | return ret_val; | 1937 | return ret_val; |
@@ -1908,8 +1955,10 @@ s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | |||
1908 | s32 ret_val; | 1955 | s32 ret_val; |
1909 | u16 widx = 0; | 1956 | u16 widx = 0; |
1910 | 1957 | ||
1911 | /* A check for invalid values: offset too large, too many words, | 1958 | /* |
1912 | * and not enough words. */ | 1959 | * A check for invalid values: offset too large, too many words, |
1960 | * and not enough words. | ||
1961 | */ | ||
1913 | if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || | 1962 | if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || |
1914 | (words == 0)) { | 1963 | (words == 0)) { |
1915 | hw_dbg(hw, "nvm parameter(s) out of bounds\n"); | 1964 | hw_dbg(hw, "nvm parameter(s) out of bounds\n"); |
@@ -1939,8 +1988,10 @@ s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | |||
1939 | 1988 | ||
1940 | e1000_standby_nvm(hw); | 1989 | e1000_standby_nvm(hw); |
1941 | 1990 | ||
1942 | /* Some SPI eeproms use the 8th address bit embedded in the | 1991 | /* |
1943 | * opcode */ | 1992 | * Some SPI eeproms use the 8th address bit embedded in the |
1993 | * opcode | ||
1994 | */ | ||
1944 | if ((nvm->address_bits == 8) && (offset >= 128)) | 1995 | if ((nvm->address_bits == 8) && (offset >= 128)) |
1945 | write_opcode |= NVM_A8_OPCODE_SPI; | 1996 | write_opcode |= NVM_A8_OPCODE_SPI; |
1946 | 1997 | ||
@@ -1985,9 +2036,9 @@ s32 e1000e_read_mac_addr(struct e1000_hw *hw) | |||
1985 | /* Check for an alternate MAC address. An alternate MAC | 2036 | /* Check for an alternate MAC address. An alternate MAC |
1986 | * address can be setup by pre-boot software and must be | 2037 | * address can be setup by pre-boot software and must be |
1987 | * treated like a permanent address and must override the | 2038 | * treated like a permanent address and must override the |
1988 | * actual permanent MAC address. */ | 2039 | * actual permanent MAC address.*/ |
1989 | ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1, | 2040 | ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1, |
1990 | &mac_addr_offset); | 2041 | &mac_addr_offset); |
1991 | if (ret_val) { | 2042 | if (ret_val) { |
1992 | hw_dbg(hw, "NVM Read Error\n"); | 2043 | hw_dbg(hw, "NVM Read Error\n"); |
1993 | return ret_val; | 2044 | return ret_val; |
@@ -2000,7 +2051,7 @@ s32 e1000e_read_mac_addr(struct e1000_hw *hw) | |||
2000 | mac_addr_offset += ETH_ALEN/sizeof(u16); | 2051 | mac_addr_offset += ETH_ALEN/sizeof(u16); |
2001 | 2052 | ||
2002 | /* make sure we have a valid mac address here | 2053 | /* make sure we have a valid mac address here |
2003 | * before using it */ | 2054 | * before using it */ |
2004 | ret_val = e1000_read_nvm(hw, mac_addr_offset, 1, | 2055 | ret_val = e1000_read_nvm(hw, mac_addr_offset, 1, |
2005 | &nvm_data); | 2056 | &nvm_data); |
2006 | if (ret_val) { | 2057 | if (ret_val) { |
@@ -2012,7 +2063,7 @@ s32 e1000e_read_mac_addr(struct e1000_hw *hw) | |||
2012 | } | 2063 | } |
2013 | 2064 | ||
2014 | if (mac_addr_offset) | 2065 | if (mac_addr_offset) |
2015 | hw->dev_spec.e82571.alt_mac_addr_is_present = 1; | 2066 | hw->dev_spec.e82571.alt_mac_addr_is_present = 1; |
2016 | } | 2067 | } |
2017 | 2068 | ||
2018 | for (i = 0; i < ETH_ALEN; i += 2) { | 2069 | for (i = 0; i < ETH_ALEN; i += 2) { |
@@ -2188,7 +2239,7 @@ bool e1000e_check_mng_mode(struct e1000_hw *hw) | |||
2188 | } | 2239 | } |
2189 | 2240 | ||
2190 | /** | 2241 | /** |
2191 | * e1000e_enable_tx_pkt_filtering - Enable packet filtering on TX | 2242 | * e1000e_enable_tx_pkt_filtering - Enable packet filtering on Tx |
2192 | * @hw: pointer to the HW structure | 2243 | * @hw: pointer to the HW structure |
2193 | * | 2244 | * |
2194 | * Enables packet filtering on transmit packets if manageability is enabled | 2245 | * Enables packet filtering on transmit packets if manageability is enabled |
@@ -2208,7 +2259,8 @@ bool e1000e_enable_tx_pkt_filtering(struct e1000_hw *hw) | |||
2208 | return 0; | 2259 | return 0; |
2209 | } | 2260 | } |
2210 | 2261 | ||
2211 | /* If we can't read from the host interface for whatever | 2262 | /* |
2263 | * If we can't read from the host interface for whatever | ||
2212 | * reason, disable filtering. | 2264 | * reason, disable filtering. |
2213 | */ | 2265 | */ |
2214 | ret_val = e1000_mng_enable_host_if(hw); | 2266 | ret_val = e1000_mng_enable_host_if(hw); |
@@ -2226,7 +2278,8 @@ bool e1000e_enable_tx_pkt_filtering(struct e1000_hw *hw) | |||
2226 | hdr->checksum = 0; | 2278 | hdr->checksum = 0; |
2227 | csum = e1000_calculate_checksum((u8 *)hdr, | 2279 | csum = e1000_calculate_checksum((u8 *)hdr, |
2228 | E1000_MNG_DHCP_COOKIE_LENGTH); | 2280 | E1000_MNG_DHCP_COOKIE_LENGTH); |
2229 | /* If either the checksums or signature don't match, then | 2281 | /* |
2282 | * If either the checksums or signature don't match, then | ||
2230 | * the cookie area isn't considered valid, in which case we | 2283 | * the cookie area isn't considered valid, in which case we |
2231 | * take the safe route of assuming Tx filtering is enabled. | 2284 | * take the safe route of assuming Tx filtering is enabled. |
2232 | */ | 2285 | */ |
@@ -2318,8 +2371,10 @@ static s32 e1000_mng_host_if_write(struct e1000_hw *hw, u8 *buffer, | |||
2318 | /* Calculate length in DWORDs */ | 2371 | /* Calculate length in DWORDs */ |
2319 | length >>= 2; | 2372 | length >>= 2; |
2320 | 2373 | ||
2321 | /* The device driver writes the relevant command block into the | 2374 | /* |
2322 | * ram area. */ | 2375 | * The device driver writes the relevant command block into the |
2376 | * ram area. | ||
2377 | */ | ||
2323 | for (i = 0; i < length; i++) { | 2378 | for (i = 0; i < length; i++) { |
2324 | for (j = 0; j < sizeof(u32); j++) { | 2379 | for (j = 0; j < sizeof(u32); j++) { |
2325 | *(tmp + j) = *bufptr++; | 2380 | *(tmp + j) = *bufptr++; |