[haiku-commits] r42680 - in haiku/trunk/src/add-ons/kernel/drivers/network: . ipro1000/dev/e1000

  • From: zharik@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 23 Aug 2011 20:54:26 +0200 (CEST)

Author: siarzhuk
Date: 2011-08-23 20:54:25 +0200 (Tue, 23 Aug 2011)
New Revision: 42680
Changeset: https://dev.haiku-os.org/changeset/42680

Added:
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_mbx.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_mbx.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_vf.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_vf.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_lem.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_lem.h
Modified:
   haiku/trunk/src/add-ons/kernel/drivers/network/Jamfile
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/Jamfile
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/LICENSE
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/README
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_80003es2lan.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_80003es2lan.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82540.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82541.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82541.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82542.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82543.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82543.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82571.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82571.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82575.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82575.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_api.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_api.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_defines.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_hw.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_ich8lan.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_ich8lan.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_mac.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_mac.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_manage.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_manage.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_nvm.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_nvm.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_osdep.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_osdep.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_phy.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_phy.h
   
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_regs.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/glue.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_em.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_em.h
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_igb.c
   haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_igb.h
Log:
* ipro1000 driver updated to FreeBSD 8.2 level: 
  it incorporate now "em" and "lem" freebsd drivers.
  Note: if_igb is not used - too much "undeclared"
  stuff required from the compatibility layer. :-(



Modified: haiku/trunk/src/add-ons/kernel/drivers/network/Jamfile
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/network/Jamfile      2011-08-23 
18:36:57 UTC (rev 42679)
+++ haiku/trunk/src/add-ons/kernel/drivers/network/Jamfile      2011-08-23 
18:54:25 UTC (rev 42680)
@@ -1,7 +1,6 @@
 SubDir HAIKU_TOP src add-ons kernel drivers network ;
 
 SubInclude HAIKU_TOP src add-ons kernel drivers network etherpci ;
-SubInclude HAIKU_TOP src add-ons kernel drivers network ipro1000 ;
 SubInclude HAIKU_TOP src add-ons kernel drivers network pegasus ;
 SubInclude HAIKU_TOP src add-ons kernel drivers network rtl8169 ;
 SubInclude HAIKU_TOP src add-ons kernel drivers network sis900 ;
@@ -33,6 +32,7 @@
 SubInclude HAIKU_TOP src add-ons kernel drivers network 3com ;
 SubInclude HAIKU_TOP src add-ons kernel drivers network atheros813x ;
 SubInclude HAIKU_TOP src add-ons kernel drivers network ipro100 ;
+SubInclude HAIKU_TOP src add-ons kernel drivers network ipro1000 ;
 SubInclude HAIKU_TOP src add-ons kernel drivers network dec21xxx ;
 SubInclude HAIKU_TOP src add-ons kernel drivers network rtl8139 ;
 

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/Jamfile
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/Jamfile   
2011-08-23 18:36:57 UTC (rev 42679)
+++ haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/Jamfile   
2011-08-23 18:54:25 UTC (rev 42680)
@@ -21,12 +21,15 @@
        e1000_ich8lan.c
        e1000_mac.c
        e1000_manage.c
+       e1000_mbx.c
        e1000_nvm.c
        e1000_osdep.c
        e1000_phy.c
+       e1000_vf.c
+       if_lem.c
        if_em.c
 
        glue.c
-       : libfreebsd_network.a
+       : libfreebsd_network.a # ipro1000_led.a
        ;
 

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/LICENSE
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/LICENSE   
2011-08-23 18:36:57 UTC (rev 42679)
+++ haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/LICENSE   
2011-08-23 18:54:25 UTC (rev 42680)
@@ -1,6 +1,6 @@
-$FreeBSD: src/sys/dev/e1000/LICENSE,v 1.1.2.1 2008/08/11 18:33:10 jfv Exp $
+$FreeBSD: src/sys/dev/e1000/LICENSE,v 1.1.4.2.4.1 2010/12/21 17:09:25 kensmith 
Exp $
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2010, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/README
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/README    
2011-08-23 18:36:57 UTC (rev 42679)
+++ haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/README    
2011-08-23 18:54:25 UTC (rev 42680)
@@ -1,4 +1,4 @@
-$FreeBSD: src/sys/dev/e1000/README,v 1.1.2.1 2008/08/11 18:33:10 jfv Exp $
+$FreeBSD: src/sys/dev/e1000/README,v 1.1.4.1.6.1 2010/12/21 17:09:25 kensmith 
Exp $
 FreeBSD* Driver for Intel Network Connection
 =============================================
 

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_80003es2lan.c
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_80003es2lan.c
       2011-08-23 18:36:57 UTC (rev 42679)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_80003es2lan.c
       2011-08-23 18:54:25 UTC (rev 42680)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2010, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -30,7 +30,7 @@
   POSSIBILITY OF SUCH DAMAGE.
 
 ******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/e1000_80003es2lan.c,v 1.1.2.2 2008/12/01 
07:13:52 jfv Exp $*/
+/*$FreeBSD: src/sys/dev/e1000/e1000_80003es2lan.c,v 1.3.2.2.4.1 2010/12/21 
17:09:25 kensmith Exp $*/
 
 /*
  * 80003ES2LAN Gigabit Ethernet Controller (Copper)
@@ -43,9 +43,7 @@
 static s32  e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw);
 static s32  e1000_init_mac_params_80003es2lan(struct e1000_hw *hw);
 static s32  e1000_acquire_phy_80003es2lan(struct e1000_hw *hw);
-static s32  e1000_acquire_mac_csr_80003es2lan(struct e1000_hw *hw);
 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw);
-static void e1000_release_mac_csr_80003es2lan(struct e1000_hw *hw);
 static s32  e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw);
 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw);
 static s32  e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
@@ -173,7 +171,7 @@
                break;
        }
 
-       nvm->type               = e1000_nvm_eeprom_spi;
+       nvm->type = e1000_nvm_eeprom_spi;
 
        size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
                          E1000_EECD_SIZE_EX_SHIFT);
@@ -208,17 +206,22 @@
 static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
 {
        struct e1000_mac_info *mac = &hw->mac;
-       s32 ret_val = E1000_SUCCESS;
 
        DEBUGFUNC("e1000_init_mac_params_80003es2lan");
 
-       /* Set media type */
+       /* Set media type and media-dependent function pointers */
        switch (hw->device_id) {
        case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
                hw->phy.media_type = e1000_media_type_internal_serdes;
+               mac->ops.check_for_link = e1000_check_for_serdes_link_generic;
+               mac->ops.setup_physical_interface =
+                       e1000_setup_fiber_serdes_link_generic;
                break;
        default:
                hw->phy.media_type = e1000_media_type_copper;
+               mac->ops.check_for_link = e1000_check_for_copper_link_generic;
+               mac->ops.setup_physical_interface =
+                       e1000_setup_copper_link_80003es2lan;
                break;
        }
 
@@ -228,10 +231,14 @@
        mac->rar_entry_count = E1000_RAR_ENTRIES;
        /* Set if part includes ASF firmware */
        mac->asf_firmware_present = TRUE;
-       /* Set if manageability features are enabled. */
+       /* FWSM register */
+       mac->has_fwsm = TRUE;
+       /* ARC supported; valid only if manageability features are enabled. */
        mac->arc_subsystem_valid =
                (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
                        ? TRUE : FALSE;
+       /* Adaptive IFS not supported */
+       mac->adaptive_ifs = FALSE;
 
        /* Function pointers */
 
@@ -243,27 +250,6 @@
        mac->ops.init_hw = e1000_init_hw_80003es2lan;
        /* link setup */
        mac->ops.setup_link = e1000_setup_link_generic;
-       /* physical interface link setup */
-       mac->ops.setup_physical_interface =
-               (hw->phy.media_type == e1000_media_type_copper)
-                       ? e1000_setup_copper_link_80003es2lan
-                       : e1000_setup_fiber_serdes_link_generic;
-       /* check for link */
-       switch (hw->phy.media_type) {
-       case e1000_media_type_copper:
-               mac->ops.check_for_link = e1000_check_for_copper_link_generic;
-               break;
-       case e1000_media_type_fiber:
-               mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
-               break;
-       case e1000_media_type_internal_serdes:
-               mac->ops.check_for_link = e1000_check_for_serdes_link_generic;
-               break;
-       default:
-               ret_val = -E1000_ERR_CONFIG;
-               goto out;
-               break;
-       }
        /* check management mode */
        mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
        /* multicast address update */
@@ -272,10 +258,10 @@
        mac->ops.write_vfta = e1000_write_vfta_generic;
        /* clearing VFTA */
        mac->ops.clear_vfta = e1000_clear_vfta_generic;
-       /* setting MTA */
-       mac->ops.mta_set = e1000_mta_set_generic;
        /* read mac address */
        mac->ops.read_mac_addr = e1000_read_mac_addr_80003es2lan;
+       /* ID LED init */
+       mac->ops.id_led_init = e1000_id_led_init_generic;
        /* blink LED */
        mac->ops.blink_led = e1000_blink_led_generic;
        /* setup LED */
@@ -290,8 +276,10 @@
        /* link info */
        mac->ops.get_link_up_info = e1000_get_link_up_info_80003es2lan;
 
-out:
-       return ret_val;
+       /* set lan id for port to determine which phy lock to use */
+       hw->mac.ops.set_lan_id(hw);
+
+       return E1000_SUCCESS;
 }
 
 /**
@@ -307,7 +295,6 @@
        hw->mac.ops.init_params = e1000_init_mac_params_80003es2lan;
        hw->nvm.ops.init_params = e1000_init_nvm_params_80003es2lan;
        hw->phy.ops.init_params = e1000_init_phy_params_80003es2lan;
-       e1000_get_bus_info_pcie_generic(hw);
 }
 
 /**
@@ -342,7 +329,6 @@
        e1000_release_swfw_sync_80003es2lan(hw, mask);
 }
 
-
 /**
  *  e1000_acquire_mac_csr_80003es2lan - Acquire rights to access Kumeran 
register
  *  @hw: pointer to the HW structure
@@ -532,28 +518,36 @@
                goto out;
        }
 
-       /*
-        * The "ready" bit in the MDIC register may be incorrectly set
-        * before the device has completed the "Page Select" MDI
-        * transaction.  So we wait 200us after each MDI command...
-        */
-       usec_delay(200);
+       if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
+               /*
+                * The "ready" bit in the MDIC register may be incorrectly set
+                * before the device has completed the "Page Select" MDI
+                * transaction.  So we wait 200us after each MDI command...
+                */
+               usec_delay(200);
 
-       /* ...and verify the command was successful. */
-       ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
+               /* ...and verify the command was successful. */
+               ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
 
-       if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
-               ret_val = -E1000_ERR_PHY;
-               e1000_release_phy_80003es2lan(hw);
-               goto out;
-       }
+               if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
+                       ret_val = -E1000_ERR_PHY;
+                       e1000_release_phy_80003es2lan(hw);
+                       goto out;
+               }
 
-       usec_delay(200);
+               usec_delay(200);
 
-       ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
-                                          data);
+               ret_val = e1000_read_phy_reg_mdic(hw,
+                                                 MAX_PHY_REG_ADDRESS & offset,
+                                                 data);
 
-       usec_delay(200);
+               usec_delay(200);
+       } else {
+               ret_val = e1000_read_phy_reg_mdic(hw,
+                                                 MAX_PHY_REG_ADDRESS & offset,
+                                                 data);
+       }
+
        e1000_release_phy_80003es2lan(hw);
 
 out:
@@ -599,29 +593,36 @@
                goto out;
        }
 
+       if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
+               /*
+                * The "ready" bit in the MDIC register may be incorrectly set
+                * before the device has completed the "Page Select" MDI
+                * transaction.  So we wait 200us after each MDI command...
+                */
+               usec_delay(200);
 
-       /*
-        * The "ready" bit in the MDIC register may be incorrectly set
-        * before the device has completed the "Page Select" MDI
-        * transaction.  So we wait 200us after each MDI command...
-        */
-       usec_delay(200);
+               /* ...and verify the command was successful. */
+               ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
 
-       /* ...and verify the command was successful. */
-       ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
+               if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
+                       ret_val = -E1000_ERR_PHY;
+                       e1000_release_phy_80003es2lan(hw);
+                       goto out;
+               }
 
-       if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
-               ret_val = -E1000_ERR_PHY;
-               e1000_release_phy_80003es2lan(hw);
-               goto out;
-       }
+               usec_delay(200);
 
-       usec_delay(200);
+               ret_val = e1000_write_phy_reg_mdic(hw,
+                                                 MAX_PHY_REG_ADDRESS & offset,
+                                                 data);
 
-       ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
-                                         data);
+               usec_delay(200);
+       } else {
+               ret_val = e1000_write_phy_reg_mdic(hw,
+                                                 MAX_PHY_REG_ADDRESS & offset,
+                                                 data);
+       }
 
-       usec_delay(200);
        e1000_release_phy_80003es2lan(hw);
 
 out:
@@ -802,17 +803,16 @@
 
        index = phy_data & GG82563_DSPD_CABLE_LENGTH;
 
-       if (index < GG82563_CABLE_LENGTH_TABLE_SIZE + 5) {
-               phy->min_cable_length = e1000_gg82563_cable_length_table[index];
-               phy->max_cable_length =
-                                e1000_gg82563_cable_length_table[index+5];
-
-               phy->cable_length = (phy->min_cable_length +
-                                    phy->max_cable_length) / 2;
-       } else {
-               ret_val = E1000_ERR_PHY;
+       if (index >= GG82563_CABLE_LENGTH_TABLE_SIZE - 5) {
+               ret_val = -E1000_ERR_PHY;
+               goto out;
        }
 
+       phy->min_cable_length = e1000_gg82563_cable_length_table[index];
+       phy->max_cable_length = e1000_gg82563_cable_length_table[index + 5];
+
+       phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
+
 out:
        return ret_val;
 }
@@ -892,7 +892,7 @@
        E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
        icr = E1000_READ_REG(hw, E1000_ICR);
 
-       e1000_check_alt_mac_addr_generic(hw);
+       ret_val = e1000_check_alt_mac_addr_generic(hw);
 
 out:
        return ret_val;
@@ -916,11 +916,10 @@
        e1000_initialize_hw_bits_80003es2lan(hw);
 
        /* Initialize identification LED */
-       ret_val = e1000_id_led_init_generic(hw);
-       if (ret_val) {
+       ret_val = mac->ops.id_led_init(hw);
+       if (ret_val)
                DEBUGOUT("Error initializing identification LED\n");
                /* This is not fatal and we should not stop init due to this */
-       }
 
        /* Disabling VLAN filtering */
        DEBUGOUT("Initializing the IEEE VLAN\n");
@@ -970,6 +969,19 @@
        reg_data &= ~0x00100000;
        E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data);
 
+       /* default to TRUE to enable the MDIC W/A */
+       hw->dev_spec._80003es2lan.mdic_wa_enable = TRUE;
+
+       ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
+                                     E1000_KMRNCTRLSTA_OFFSET >>
+                                     E1000_KMRNCTRLSTA_OFFSET_SHIFT,
+                                     &i);
+       if (!ret_val) {
+               if ((i & E1000_KMRNCTRLSTA_OPMODE_MASK) ==
+                    E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO)
+                       hw->dev_spec._80003es2lan.mdic_wa_enable = FALSE;
+       }
+
        /*
         * Clear all of the statistics registers (clear on read).  It is
         * important that we do this after we have tried to establish link
@@ -1036,77 +1048,78 @@
 
        DEBUGFUNC("e1000_copper_link_setup_gg82563_80003es2lan");
 
-       if (!phy->reset_disable) {
-               ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
-                                            &data);
-               if (ret_val)
-                       goto out;
+       if (phy->reset_disable)
+               goto skip_reset;
 
-               data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
-               /* Use 25MHz for both link down and 1000Base-T for Tx clock. */
-               data |= GG82563_MSCR_TX_CLK_1000MBPS_25;
+       ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
+                                    &data);
+       if (ret_val)
+               goto out;
 
-               ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
-                                             data);
-               if (ret_val)
-                       goto out;
+       data |= GG82563_MSCR_ASSERT_CRS_ON_TX;
+       /* Use 25MHz for both link down and 1000Base-T for Tx clock. */
+       data |= GG82563_MSCR_TX_CLK_1000MBPS_25;
 
-               /*
-                * Options:
-                *   MDI/MDI-X = 0 (default)
-                *   0 - Auto for all speeds
-                *   1 - MDI mode
-                *   2 - MDI-X mode
-                *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
-                */
-               ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL, 
&data);
-               if (ret_val)
-                       goto out;
+       ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_MAC_SPEC_CTRL,
+                                     data);
+       if (ret_val)
+               goto out;
 
-               data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
+       /*
+        * Options:
+        *   MDI/MDI-X = 0 (default)
+        *   0 - Auto for all speeds
+        *   1 - MDI mode
+        *   2 - MDI-X mode
+        *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
+        */
+       ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_SPEC_CTRL, &data);
+       if (ret_val)
+               goto out;
 
-               switch (phy->mdix) {
-               case 1:
-                       data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
-                       break;
-               case 2:
-                       data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
-                       break;
-               case 0:
-               default:
-                       data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
-                       break;
-               }
+       data &= ~GG82563_PSCR_CROSSOVER_MODE_MASK;
 
-               /*
-                * Options:
-                *   disable_polarity_correction = 0 (default)
-                *       Automatic Correction for Reversed Cable Polarity
-                *   0 - Disabled
-                *   1 - Enabled
-                */
-               data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
-               if (phy->disable_polarity_correction)
-                       data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
+       switch (phy->mdix) {
+       case 1:
+               data |= GG82563_PSCR_CROSSOVER_MODE_MDI;
+               break;
+       case 2:
+               data |= GG82563_PSCR_CROSSOVER_MODE_MDIX;
+               break;
+       case 0:
+       default:
+               data |= GG82563_PSCR_CROSSOVER_MODE_AUTO;
+               break;
+       }
 
-               ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, 
data);
-               if (ret_val)
-                       goto out;
+       /*
+        * Options:
+        *   disable_polarity_correction = 0 (default)
+        *       Automatic Correction for Reversed Cable Polarity
+        *   0 - Disabled
+        *   1 - Enabled
+        */
+       data &= ~GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
+       if (phy->disable_polarity_correction)
+               data |= GG82563_PSCR_POLARITY_REVERSAL_DISABLE;
 
-               /* SW Reset the PHY so all changes take effect */
-               ret_val = hw->phy.ops.commit(hw);
-               if (ret_val) {
-                       DEBUGOUT("Error Resetting the PHY\n");
-                       goto out;
-               }
+       ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_SPEC_CTRL, data);
+       if (ret_val)
+               goto out;
 
+       /* SW Reset the PHY so all changes take effect */
+       ret_val = hw->phy.ops.commit(hw);
+       if (ret_val) {
+               DEBUGOUT("Error Resetting the PHY\n");
+               goto out;
        }
 
+skip_reset:
        /* Bypass Rx and Tx FIFO's */
        ret_val = e1000_write_kmrn_reg_80003es2lan(hw,
-                               E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL,
-                               E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS |
-                                       E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS);
+                                       E1000_KMRNCTRLSTA_OFFSET_FIFO_CTRL,
+                                       E1000_KMRNCTRLSTA_FIFO_CTRL_RX_BYPASS |
+                                       E1000_KMRNCTRLSTA_FIFO_CTRL_TX_BYPASS);
        if (ret_val)
                goto out;
 
@@ -1147,22 +1160,19 @@
        if (!(hw->mac.ops.check_mng_mode(hw))) {
                /* Enable Electrical Idle on the PHY */
                data |= GG82563_PMCR_ENABLE_ELECTRICAL_IDLE;
-               ret_val = hw->phy.ops.write_reg(hw,
-                                               GG82563_PHY_PWR_MGMT_CTRL,
+               ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_PWR_MGMT_CTRL,
                                                data);
                if (ret_val)
                        goto out;
-               ret_val = hw->phy.ops.read_reg(hw,
-                                              GG82563_PHY_KMRN_MODE_CTRL,
-                                              &data);
-                       if (ret_val)
-                               goto out;
 
+               ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
+                                              &data);
+               if (ret_val)
+                       goto out;
+
                data &= ~GG82563_KMCR_PASS_FALSE_CARRIER;
-               ret_val = hw->phy.ops.write_reg(hw,
-                                               GG82563_PHY_KMRN_MODE_CTRL,
+               ret_val = hw->phy.ops.write_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
                                                data);
-
                if (ret_val)
                        goto out;
        }
@@ -1261,7 +1271,6 @@
        DEBUGFUNC("e1000_configure_on_link_up");
 
        if (hw->phy.media_type == e1000_media_type_copper) {
-
                ret_val = e1000_get_speed_and_duplex_copper_generic(hw,
                                                                    &speed,
                                                                    &duplex);
@@ -1308,7 +1317,6 @@
        tipg |= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN;
        E1000_WRITE_REG(hw, E1000_TIPG, tipg);
 
-
        do {
                ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
                                               &reg_data);
@@ -1362,7 +1370,6 @@
        tipg |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
        E1000_WRITE_REG(hw, E1000_TIPG, tipg);
 
-
        do {
                ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
                                               &reg_data);
@@ -1393,7 +1400,8 @@
  *  using the kumeran interface.  The information retrieved is stored in data.
  *  Release the semaphore before exiting.
  **/
-s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset, u16 *data)
+static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
+                                           u16 *data)
 {
        u32 kmrnctrlsta;
        s32 ret_val = E1000_SUCCESS;
@@ -1429,7 +1437,8 @@
  *  at the offset using the kumeran interface.  Release semaphore
  *  before exiting.
  **/
-s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset, u16 data)
+static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
+                                            u16 data)
 {
        u32 kmrnctrlsta;
        s32 ret_val = E1000_SUCCESS;
@@ -1461,9 +1470,19 @@
        s32 ret_val = E1000_SUCCESS;
 
        DEBUGFUNC("e1000_read_mac_addr_80003es2lan");
-       if (e1000_check_alt_mac_addr_generic(hw))
-               ret_val = e1000_read_mac_addr_generic(hw);
 
+       /*
+        * If there's an alternate MAC address place it in RAR0
+        * so that it will override the Si installed default perm
+        * address.
+        */
+       ret_val = e1000_check_alt_mac_addr_generic(hw);
+       if (ret_val)
+               goto out;
+
+       ret_val = e1000_read_mac_addr_generic(hw);
+
+out:
        return ret_val;
 }
 

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_80003es2lan.h
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_80003es2lan.h
       2011-08-23 18:36:57 UTC (rev 42679)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_80003es2lan.h
       2011-08-23 18:54:25 UTC (rev 42680)
@@ -1,6 +1,6 @@
-/*******************************************************************************
+/******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2009, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -29,10 +29,9 @@
   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   POSSIBILITY OF SUCH DAMAGE.
 
-*******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/e1000_80003es2lan.h,v 1.1.2.1 2008/08/11 
18:33:10 jfv Exp $*/
+******************************************************************************/
+/*$FreeBSD: src/sys/dev/e1000/e1000_80003es2lan.h,v 1.1.4.2.4.1 2010/12/21 
17:09:25 kensmith Exp $*/
 
-
 #ifndef _E1000_80003ES2LAN_H_
 #define _E1000_80003ES2LAN_H_
 
@@ -49,6 +48,9 @@
 #define E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT   0x0000
 #define E1000_KMRNCTRLSTA_OPMODE_E_IDLE          0x2000
 
+#define E1000_KMRNCTRLSTA_OPMODE_MASK            0x000C
+#define E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO     0x0004
+
 #define E1000_TCTL_EXT_GCEX_MASK 0x000FFC00 /* Gigabit Carry Extend Padding */
 #define DEFAULT_TCTL_EXT_GCEX_80003ES2LAN        0x00010000
 

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82540.c
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82540.c 
    2011-08-23 18:36:57 UTC (rev 42679)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82540.c 
    2011-08-23 18:54:25 UTC (rev 42680)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2010, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -30,7 +30,7 @@
   POSSIBILITY OF SUCH DAMAGE.
 
 ******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/e1000_82540.c,v 1.1.2.2 2008/12/01 07:13:52 jfv 
Exp $*/
+/*$FreeBSD: src/sys/dev/e1000/e1000_82540.c,v 1.4.2.2.4.1 2010/12/21 17:09:25 
kensmith Exp $*/
 
 /*
  * 82540EM Gigabit Ethernet Controller
@@ -57,6 +57,7 @@
 static s32  e1000_setup_copper_link_82540(struct e1000_hw *hw);
 static s32  e1000_setup_fiber_serdes_link_82540(struct e1000_hw *hw);
 static void e1000_power_down_phy_copper_82540(struct e1000_hw *hw);
+static s32  e1000_read_mac_addr_82540(struct e1000_hw *hw);
 
 /**
  * e1000_init_phy_params_82540 - Init PHY func ptrs.
@@ -227,8 +228,10 @@
        mac->ops.write_vfta = e1000_write_vfta_generic;
        /* clearing VFTA */
        mac->ops.clear_vfta = e1000_clear_vfta_generic;
-       /* setting MTA */
-       mac->ops.mta_set = e1000_mta_set_generic;
+       /* read mac address */
+       mac->ops.read_mac_addr = e1000_read_mac_addr_82540;
+       /* ID LED init */
+       mac->ops.id_led_init = e1000_id_led_init_generic;
        /* setup LED */
        mac->ops.setup_led = e1000_setup_led_generic;
        /* cleanup LED */
@@ -332,7 +335,7 @@
        DEBUGFUNC("e1000_init_hw_82540");
 
        /* Initialize identification LED */
-       ret_val = e1000_id_led_init_generic(hw);
+       ret_val = mac->ops.id_led_init(hw);
        if (ret_val) {
                DEBUGOUT("Error initializing identification LED\n");
                /* This is not fatal and we should not stop init due to this */
@@ -674,3 +677,45 @@
        E1000_READ_REG(hw, E1000_MGTPTC);
 }
 
+/**
+ *  e1000_read_mac_addr_82540 - Read device MAC address
+ *  @hw: pointer to the HW structure
+ *
+ *  Reads the device MAC address from the EEPROM and stores the value.
+ *  Since devices with two ports use the same EEPROM, we increment the
+ *  last bit in the MAC address for the second port.
+ *
+ *  This version is being used over generic because of customer issues
+ *  with VmWare and Virtual Box when using generic. It seems in
+ *  the emulated 82545, RAR[0] does NOT have a valid address after a
+ *  reset, this older method works and using this breaks nothing for
+ *  these legacy adapters.
+ **/
+s32 e1000_read_mac_addr_82540(struct e1000_hw *hw)
+{
+       s32  ret_val = E1000_SUCCESS;
+       u16 offset, nvm_data, i;
+
+       DEBUGFUNC("e1000_read_mac_addr");
+
+       for (i = 0; i < ETH_ADDR_LEN; i += 2) {
+               offset = i >> 1;
+               ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
+               if (ret_val) {
+                       DEBUGOUT("NVM Read Error\n");
+                       goto out;
+               }
+               hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
+               hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
+       }
+
+       /* Flip last bit of mac address if we're on second port */
+       if (hw->bus.func == E1000_FUNC_1)
+               hw->mac.perm_addr[5] ^= 1;
+
+       for (i = 0; i < ETH_ADDR_LEN; i++)
+               hw->mac.addr[i] = hw->mac.perm_addr[i];
+
+out:
+       return ret_val;
+}

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82541.c
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82541.c 
    2011-08-23 18:36:57 UTC (rev 42679)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82541.c 
    2011-08-23 18:54:25 UTC (rev 42680)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2010, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -30,7 +30,7 @@
   POSSIBILITY OF SUCH DAMAGE.
 
 ******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/e1000_82541.c,v 1.1.2.2 2008/12/01 07:13:52 jfv 
Exp $*/
+/*$FreeBSD: src/sys/dev/e1000/e1000_82541.c,v 1.4.2.2.4.1 2010/12/21 17:09:25 
kensmith Exp $*/
 
 /*
  * 82541EI Gigabit Ethernet Controller
@@ -59,6 +59,7 @@
 static s32  e1000_setup_led_82541(struct e1000_hw *hw);
 static s32  e1000_cleanup_led_82541(struct e1000_hw *hw);
 static void e1000_clear_hw_cntrs_82541(struct e1000_hw *hw);
+static s32  e1000_read_mac_addr_82541(struct e1000_hw *hw);
 static s32  e1000_config_dsp_after_link_change_82541(struct e1000_hw *hw,
                                                      bool link_up);
 static s32  e1000_phy_init_script_82541(struct e1000_hw *hw);
@@ -259,8 +260,10 @@
        mac->ops.write_vfta = e1000_write_vfta_generic;
        /* clearing VFTA */
        mac->ops.clear_vfta = e1000_clear_vfta_generic;
-       /* setting MTA */
-       mac->ops.mta_set = e1000_mta_set_generic;
+       /* read mac address */
+       mac->ops.read_mac_addr = e1000_read_mac_addr_82541;
+       /* ID LED init */
+       mac->ops.id_led_init = e1000_id_led_init_generic;
        /* setup LED */
        mac->ops.setup_led = e1000_setup_led_82541;
        /* cleanup LED */
@@ -375,17 +378,25 @@
 static s32 e1000_init_hw_82541(struct e1000_hw *hw)
 {
        struct e1000_mac_info *mac = &hw->mac;
+       struct e1000_dev_spec_82541 *dev_spec = &hw->dev_spec._82541;
        u32 i, txdctl;
        s32 ret_val;
 
        DEBUGFUNC("e1000_init_hw_82541");
 
        /* Initialize identification LED */
-       ret_val = e1000_id_led_init_generic(hw);
+       ret_val = mac->ops.id_led_init(hw);
        if (ret_val) {
                DEBUGOUT("Error initializing identification LED\n");
                /* This is not fatal and we should not stop init due to this */
        }
+        
+       /* Storing the Speed Power Down  value for later use */
+       ret_val = hw->phy.ops.read_reg(hw,
+                                      IGP01E1000_GMII_FIFO,
+                                      &dev_spec->spd_default);
+       if (ret_val)
+               goto out;
 
        /* Disabling VLAN filtering */
        DEBUGOUT("Initializing the IEEE VLAN\n");
@@ -423,6 +434,7 @@
         */
        e1000_clear_hw_cntrs_82541(hw);
 
+out:
        return ret_val;
 }
 
@@ -1281,3 +1293,35 @@
        E1000_READ_REG(hw, E1000_MGTPDC);
        E1000_READ_REG(hw, E1000_MGTPTC);
 }
+
+/**
+ *  e1000_read_mac_addr_82541 - Read device MAC address
+ *  @hw: pointer to the HW structure
+ *
+ *  Reads the device MAC address from the EEPROM and stores the value.
+ **/
+static s32 e1000_read_mac_addr_82541(struct e1000_hw *hw)
+{
+       s32  ret_val = E1000_SUCCESS;
+       u16 offset, nvm_data, i;
+
+       DEBUGFUNC("e1000_read_mac_addr");
+
+       for (i = 0; i < ETH_ADDR_LEN; i += 2) {
+               offset = i >> 1;
+               ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
+               if (ret_val) {
+                       DEBUGOUT("NVM Read Error\n");
+                       goto out;
+               }
+               hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
+               hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
+       }
+
+       for (i = 0; i < ETH_ADDR_LEN; i++)
+               hw->mac.addr[i] = hw->mac.perm_addr[i];
+
+out:
+       return ret_val;
+}
+

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82541.h
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82541.h 
    2011-08-23 18:36:57 UTC (rev 42679)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82541.h 
    2011-08-23 18:54:25 UTC (rev 42680)
@@ -30,7 +30,7 @@
   POSSIBILITY OF SUCH DAMAGE.
 
 ******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/e1000_82541.h,v 1.1.2.1 2008/08/11 18:33:10 jfv 
Exp $*/
+/*$FreeBSD: src/sys/dev/e1000/e1000_82541.h,v 1.1.4.1.6.1 2010/12/21 17:09:25 
kensmith Exp $*/
 
 #ifndef _E1000_82541_H_
 #define _E1000_82541_H_

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82542.c
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82542.c 
    2011-08-23 18:36:57 UTC (rev 42679)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82542.c 
    2011-08-23 18:54:25 UTC (rev 42680)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2010, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -30,7 +30,7 @@
   POSSIBILITY OF SUCH DAMAGE.
 
 ******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/e1000_82542.c,v 1.1.2.2 2008/12/01 07:13:52 jfv 
Exp $*/
+/*$FreeBSD: src/sys/dev/e1000/e1000_82542.c,v 1.3.2.2.4.1 2010/12/21 17:09:25 
kensmith Exp $*/
 
 /*
  * 82542 Gigabit Ethernet Controller
@@ -49,7 +49,9 @@
 static s32  e1000_led_off_82542(struct e1000_hw *hw);
 static void e1000_rar_set_82542(struct e1000_hw *hw, u8 *addr, u32 index);
 static void e1000_clear_hw_cntrs_82542(struct e1000_hw *hw);
+static s32  e1000_read_mac_addr_82542(struct e1000_hw *hw);
 
+
 /**
  *  e1000_init_phy_params_82542 - Init PHY func ptrs.
  *  @hw: pointer to the HW structure
@@ -132,8 +134,8 @@
        mac->ops.write_vfta = e1000_write_vfta_generic;
        /* clearing VFTA */
        mac->ops.clear_vfta = e1000_clear_vfta_generic;
-       /* setting MTA */
-       mac->ops.mta_set = e1000_mta_set_generic;
+       /* read mac address */
+       mac->ops.read_mac_addr = e1000_read_mac_addr_82542;
        /* set RAR */
        mac->ops.rar_set = e1000_rar_set_82542;
        /* turn on/off LED */
@@ -554,3 +556,34 @@
        E1000_READ_REG(hw, E1000_PTC1023);
        E1000_READ_REG(hw, E1000_PTC1522);
 }
+
+/**
+ *  e1000_read_mac_addr_82542 - Read device MAC address
+ *  @hw: pointer to the HW structure
+ *
+ *  Reads the device MAC address from the EEPROM and stores the value.
+ **/
+static s32 e1000_read_mac_addr_82542(struct e1000_hw *hw)
+{
+       s32  ret_val = E1000_SUCCESS;
+       u16 offset, nvm_data, i;
+
+       DEBUGFUNC("e1000_read_mac_addr");
+
+       for (i = 0; i < ETH_ADDR_LEN; i += 2) {
+               offset = i >> 1;
+               ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
+               if (ret_val) {
+                       DEBUGOUT("NVM Read Error\n");
+                       goto out;
+               }
+               hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
+               hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
+       }
+
+       for (i = 0; i < ETH_ADDR_LEN; i++)
+               hw->mac.addr[i] = hw->mac.perm_addr[i];
+
+out:
+       return ret_val;
+}

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82543.c
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82543.c 
    2011-08-23 18:36:57 UTC (rev 42679)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_82543.c 
    2011-08-23 18:54:25 UTC (rev 42680)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2010, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -30,7 +30,7 @@
   POSSIBILITY OF SUCH DAMAGE.
 
 ******************************************************************************/
-/*$FreeBSD: src/sys/dev/e1000/e1000_82543.c,v 1.1.2.2 2008/12/01 07:13:52 jfv 
Exp $*/
+/*$FreeBSD: src/sys/dev/e1000/e1000_82543.c,v 1.2.2.2.4.1 2010/12/21 17:09:25 
kensmith Exp $*/
 
 /*
  * 82543GC Gigabit Ethernet Controller (Fiber)
@@ -63,7 +63,6 @@
 static s32  e1000_led_off_82543(struct e1000_hw *hw);
 static void e1000_write_vfta_82543(struct e1000_hw *hw, u32 offset,
                                    u32 value);
-static void e1000_mta_set_82543(struct e1000_hw *hw, u32 hash_value);
 static void e1000_clear_hw_cntrs_82543(struct e1000_hw *hw);
 static s32  e1000_config_mac_to_phy_82543(struct e1000_hw *hw);
 static bool e1000_init_phy_disabled_82543(struct e1000_hw *hw);

[... truncated: 31762 lines follow ...]

Other related posts: