[kernel] r16186 - in dists/lenny/linux-2.6/debian: . patches/features/all/e1000e patches/series

Ben Hutchings benh at alioth.debian.org
Fri Aug 27 02:41:24 UTC 2010


Author: benh
Date: Fri Aug 27 02:41:21 2010
New Revision: 16186

Log:
e1000e: Add support for 82567LM-4, 82567LM-3, 82567LF-3 and 82583V controllers (Closes: #512546)

Added:
   dists/lenny/linux-2.6/debian/patches/features/all/e1000e/
   dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-82567LM-3-and-82567LF-3-ICH10.patch
   dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-82583-device-id.patch
   dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-the-82567LM-4-device.patch
Modified:
   dists/lenny/linux-2.6/debian/changelog
   dists/lenny/linux-2.6/debian/patches/series/25

Modified: dists/lenny/linux-2.6/debian/changelog
==============================================================================
--- dists/lenny/linux-2.6/debian/changelog	Wed Aug 25 12:26:26 2010	(r16185)
+++ dists/lenny/linux-2.6/debian/changelog	Fri Aug 27 02:41:21 2010	(r16186)
@@ -4,6 +4,8 @@
   * pid_ns: Ensure that child_reaper is always valid (Closes: #570350)
   * [xen] Fix deadlock in timer interrupt, thanks to Zdenek Salvet
     (Closes: #534880)
+  * e1000e: Add support for 82567LM-4, 82567LM-3, 82567LF-3 and 82583V
+    controllers (Closes: #512546)
 
   [ Moritz Muehlenhoff ]
   * parport: quickfix the proc registration bug (Closes: #588672)

Added: dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-82567LM-3-and-82567LF-3-ICH10.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-82567LM-3-and-82567LF-3-ICH10.patch	Fri Aug 27 02:41:21 2010	(r16186)
@@ -0,0 +1,542 @@
+From 97a036fad7634efc56750aaff1e4fcd935b2f764 Mon Sep 17 00:00:00 2001
+From: Bruce Allan <bruce.w.allan at intel.com>
+Date: Tue, 26 Aug 2008 18:36:50 -0700
+Subject: [PATCH 2/3] e1000e: add support for 82567LM-3 and 82567LF-3 (ICH10D) parts
+
+commit f4187b56e1f8a05dd110875d5094b21b51ebd79b upstream.
+
+Add support for new LOM devices on the latest generation ICHx platforms.
+
+Signed-off-by: Bruce Allan <bruce.w.allan at intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
+Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+[bwh: Backport to Debian lenny]
+---
+ drivers/net/e1000e/defines.h |    2 +
+ drivers/net/e1000e/e1000.h   |    3 +
+ drivers/net/e1000e/ethtool.c |   22 +++++-
+ drivers/net/e1000e/hw.h      |    3 +
+ drivers/net/e1000e/ich8lan.c |  154 +++++++++++++++++++++++++++++++++++++++---
+ drivers/net/e1000e/netdev.c  |   26 +++++++
+ drivers/net/e1000e/phy.c     |   85 +++++++++++++++++++++++
+ 7 files changed, 281 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/net/e1000e/defines.h b/drivers/net/e1000e/defines.h
+index a0c378a..48f79ec 100644
+--- a/drivers/net/e1000e/defines.h
++++ b/drivers/net/e1000e/defines.h
+@@ -518,6 +518,7 @@
+ #define NWAY_LPAR_ASM_DIR        0x0800 /* LP Asymmetric Pause Direction bit */
+ 
+ /* Autoneg Expansion Register */
++#define NWAY_ER_LP_NWAY_CAPS     0x0001 /* LP has Auto Neg Capability */
+ 
+ /* 1000BASE-T Control Register */
+ #define CR_1000T_HD_CAPS         0x0100 /* Advertise 1000T HD capability */
+@@ -553,6 +554,7 @@
+ #define E1000_EECD_DO        0x00000008 /* NVM Data Out */
+ #define E1000_EECD_REQ       0x00000040 /* NVM Access Request */
+ #define E1000_EECD_GNT       0x00000080 /* NVM Access Grant */
++#define E1000_EECD_PRES      0x00000100 /* NVM Present */
+ #define E1000_EECD_SIZE      0x00000200 /* NVM Size (0=64 word 1=256 word) */
+ /* NVM Addressing bits based on type (0-small, 1-large) */
+ #define E1000_EECD_ADDR_BITS 0x00000400
+diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h
+index cbdf843..7ade589 100644
+--- a/drivers/net/e1000e/e1000.h
++++ b/drivers/net/e1000e/e1000.h
+@@ -103,6 +103,7 @@ enum e1000_boards {
+ 	board_80003es2lan,
+ 	board_ich8lan,
+ 	board_ich9lan,
++	board_ich10lan,
+ };
+ 
+ struct e1000_queue_stats {
+@@ -396,6 +397,7 @@ extern struct e1000_info e1000_82573_info;
+ extern struct e1000_info e1000_82574_info;
+ extern struct e1000_info e1000_ich8_info;
+ extern struct e1000_info e1000_ich9_info;
++extern struct e1000_info e1000_ich10_info;
+ extern struct e1000_info e1000_es2_info;
+ 
+ extern s32 e1000e_read_pba_num(struct e1000_hw *hw, u32 *pba_num);
+@@ -468,6 +470,7 @@ extern s32 e1000e_get_cable_length_m88(struct e1000_hw *hw);
+ extern s32 e1000e_get_phy_info_m88(struct e1000_hw *hw);
+ extern s32 e1000e_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data);
+ extern s32 e1000e_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data);
++extern s32 e1000e_phy_init_script_igp3(struct e1000_hw *hw);
+ extern enum e1000_phy_type e1000e_get_phy_type_from_id(u32 phy_id);
+ extern s32 e1000e_determine_phy_address(struct e1000_hw *hw);
+ extern s32 e1000e_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data);
+diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
+index 6f3b496..2497ae2 100644
+--- a/drivers/net/e1000e/ethtool.c
++++ b/drivers/net/e1000e/ethtool.c
+@@ -789,6 +789,7 @@ static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
+ 	case e1000_82574:
+ 	case e1000_ich8lan:
+ 	case e1000_ich9lan:
++	case e1000_ich10lan:
+ 		toggle = 0x7FFFF033;
+ 		break;
+ 	default:
+@@ -841,7 +842,9 @@ static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
+ 	REG_PATTERN_TEST(E1000_TIDV, 0x0000FFFF, 0x0000FFFF);
+ 	for (i = 0; i < mac->rar_entry_count; i++)
+ 		REG_PATTERN_TEST_ARRAY(E1000_RA, ((i << 1) + 1),
+-				       0x8003FFFF, 0xFFFFFFFF);
++				       ((mac->type == e1000_ich10lan) ?
++					   0x8007FFFF : 0x8003FFFF),
++				       0xFFFFFFFF);
+ 
+ 	for (i = 0; i < mac->mta_reg_count; i++)
+ 		REG_PATTERN_TEST_ARRAY(E1000_MTA, i, 0xFFFFFFFF, 0xFFFFFFFF);
+@@ -923,12 +926,23 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
+ 
+ 	/* Test each interrupt */
+ 	for (i = 0; i < 10; i++) {
+-		if ((adapter->flags & FLAG_IS_ICH) && (i == 8))
+-			continue;
+-
+ 		/* Interrupt to test */
+ 		mask = 1 << i;
+ 
++		if (adapter->flags & FLAG_IS_ICH) {
++			switch (mask) {
++			case E1000_ICR_RXSEQ:
++				continue;
++			case 0x00000100:
++				if (adapter->hw.mac.type == e1000_ich8lan ||
++				    adapter->hw.mac.type == e1000_ich9lan)
++					continue;
++				break;
++			default:
++				break;
++			}
++		}
++
+ 		if (!shared_int) {
+ 			/*
+ 			 * Disable the interrupt to be reported in
+diff --git a/drivers/net/e1000e/hw.h b/drivers/net/e1000e/hw.h
+index 338f7c1..f66ed37 100644
+--- a/drivers/net/e1000e/hw.h
++++ b/drivers/net/e1000e/hw.h
+@@ -362,6 +362,8 @@ enum e1e_registers {
+ #define E1000_DEV_ID_ICH10_R_BM_LM		0x10CC
+ #define E1000_DEV_ID_ICH10_R_BM_LF		0x10CD
+ #define E1000_DEV_ID_ICH10_R_BM_V		0x10CE
++#define E1000_DEV_ID_ICH10_D_BM_LM		0x10DE
++#define E1000_DEV_ID_ICH10_D_BM_LF		0x10DF
+ 
+ #define E1000_REVISION_4 4
+ 
+@@ -375,6 +377,7 @@ enum e1000_mac_type {
+ 	e1000_80003es2lan,
+ 	e1000_ich8lan,
+ 	e1000_ich9lan,
++	e1000_ich10lan,
+ };
+ 
+ enum e1000_media_type {
+diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
+index 94e4dfd..019b9c0 100644
+--- a/drivers/net/e1000e/ich8lan.c
++++ b/drivers/net/e1000e/ich8lan.c
+@@ -43,7 +43,8 @@
+  * 82567LM-2 Gigabit Network Connection
+  * 82567LF-2 Gigabit Network Connection
+  * 82567V-2 Gigabit Network Connection
+- * 82562GT-3 10/100 Network Connection
++ * 82567LF-3 Gigabit Network Connection
++ * 82567LM-3 Gigabit Network Connection
+  * 82567LM-4 Gigabit Network Connection
+  */
+ 
+@@ -158,12 +159,15 @@ static s32 e1000_check_polarity_ife_ich8lan(struct e1000_hw *hw);
+ static s32 e1000_erase_flash_bank_ich8lan(struct e1000_hw *hw, u32 bank);
+ static s32 e1000_retry_write_flash_byte_ich8lan(struct e1000_hw *hw,
+ 						u32 offset, u8 byte);
++static s32 e1000_read_flash_byte_ich8lan(struct e1000_hw *hw, u32 offset,
++					 u8 *data);
+ static s32 e1000_read_flash_word_ich8lan(struct e1000_hw *hw, u32 offset,
+ 					 u16 *data);
+ static s32 e1000_read_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
+ 					 u8 size, u16 *data);
+ static s32 e1000_setup_copper_link_ich8lan(struct e1000_hw *hw);
+ static s32 e1000_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw);
++static s32 e1000_get_cfg_done_ich8lan(struct e1000_hw *hw);
+ 
+ static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg)
+ {
+@@ -914,6 +918,56 @@ static s32 e1000_set_d3_lplu_state_ich8lan(struct e1000_hw *hw, bool active)
+ }
+ 
+ /**
++ *  e1000_valid_nvm_bank_detect_ich8lan - finds out the valid bank 0 or 1
++ *  @hw: pointer to the HW structure
++ *  @bank:  pointer to the variable that returns the active bank
++ *
++ *  Reads signature byte from the NVM using the flash access registers.
++ **/
++static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
++{
++	struct e1000_nvm_info *nvm = &hw->nvm;
++	/* flash bank size is in words */
++	u32 bank1_offset = nvm->flash_bank_size * sizeof(u16);
++	u32 act_offset = E1000_ICH_NVM_SIG_WORD * 2 + 1;
++	u8 bank_high_byte = 0;
++
++	if (hw->mac.type != e1000_ich10lan) {
++		if (er32(EECD) & E1000_EECD_SEC1VAL)
++			*bank = 1;
++		else
++			*bank = 0;
++	} else {
++		/*
++		 * Make sure the signature for bank 0 is valid,
++		 * if not check for bank1
++		 */
++		e1000_read_flash_byte_ich8lan(hw, act_offset, &bank_high_byte);
++		if ((bank_high_byte & 0xC0) == 0x80) {
++			*bank = 0;
++		} else {
++			/*
++			 * find if segment 1 is valid by verifying
++			 * bit 15:14 = 10b in word 0x13
++			 */
++			e1000_read_flash_byte_ich8lan(hw,
++						      act_offset + bank1_offset,
++						      &bank_high_byte);
++
++			/* bank1 has a valid signature equivalent to SEC1V */
++			if ((bank_high_byte & 0xC0) == 0x80) {
++				*bank = 1;
++			} else {
++				hw_dbg(hw, "ERROR: EEPROM not present\n");
++				return -E1000_ERR_NVM;
++			}
++		}
++	}
++
++	return 0;
++}
++
++/**
+  *  e1000_read_nvm_ich8lan - Read word(s) from the NVM
+  *  @hw: pointer to the HW structure
+  *  @offset: The offset (in bytes) of the word(s) to read.
+@@ -929,6 +983,7 @@ static s32 e1000_read_nvm_ich8lan(struct e1000_hw *hw, u16 offset, u16 words,
+ 	struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
+ 	u32 act_offset;
+ 	s32 ret_val;
++	u32 bank = 0;
+ 	u16 i, word;
+ 
+ 	if ((offset >= nvm->word_size) || (words > nvm->word_size - offset) ||
+@@ -941,10 +996,11 @@ static s32 e1000_read_nvm_ich8lan(struct e1000_hw *hw, u16 offset, u16 words,
+ 	if (ret_val)
+ 		return ret_val;
+ 
+-	/* Start with the bank offset, then add the relative offset. */
+-	act_offset = (er32(EECD) & E1000_EECD_SEC1VAL)
+-		     ? nvm->flash_bank_size
+-		     : 0;
++	ret_val = e1000_valid_nvm_bank_detect_ich8lan(hw, &bank);
++	if (ret_val)
++		return ret_val;
++
++	act_offset = (bank) ? nvm->flash_bank_size : 0;
+ 	act_offset += offset;
+ 
+ 	for (i = 0; i < words; i++) {
+@@ -1092,6 +1148,29 @@ static s32 e1000_read_flash_word_ich8lan(struct e1000_hw *hw, u32 offset,
+ }
+ 
+ /**
++ *  e1000_read_flash_byte_ich8lan - Read byte from flash
++ *  @hw: pointer to the HW structure
++ *  @offset: The offset of the byte to read.
++ *  @data: Pointer to a byte to store the value read.
++ *
++ *  Reads a single byte from the NVM using the flash access registers.
++ **/
++static s32 e1000_read_flash_byte_ich8lan(struct e1000_hw *hw, u32 offset,
++					 u8 *data)
++{
++	s32 ret_val;
++	u16 word = 0;
++
++	ret_val = e1000_read_flash_data_ich8lan(hw, offset, 1, &word);
++	if (ret_val)
++		return ret_val;
++
++	*data = (u8)word;
++
++	return 0;
++}
++
++/**
+  *  e1000_read_flash_data_ich8lan - Read byte or word from NVM
+  *  @hw: pointer to the HW structure
+  *  @offset: The offset (in bytes) of the byte or word to read.
+@@ -1222,7 +1301,7 @@ static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw)
+ {
+ 	struct e1000_nvm_info *nvm = &hw->nvm;
+ 	struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
+-	u32 i, act_offset, new_bank_offset, old_bank_offset;
++	u32 i, act_offset, new_bank_offset, old_bank_offset, bank;
+ 	s32 ret_val;
+ 	u16 data;
+ 
+@@ -1242,7 +1321,11 @@ static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw)
+ 	 * write to bank 0 etc.  We also need to erase the segment that
+ 	 * is going to be written
+ 	 */
+-	if (!(er32(EECD) & E1000_EECD_SEC1VAL)) {
++	ret_val =  e1000_valid_nvm_bank_detect_ich8lan(hw, &bank);
++	if (ret_val)
++		return ret_val;
++
++	if (bank == 0) {
+ 		new_bank_offset = nvm->flash_bank_size;
+ 		old_bank_offset = 0;
+ 		e1000_erase_flash_bank_ich8lan(hw, 1);
+@@ -2206,13 +2289,14 @@ void e1000e_gig_downshift_workaround_ich8lan(struct e1000_hw *hw)
+  *  'LPLU Enabled' and 'Gig Disable' to force link speed negotiation
+  *  to a lower speed.
+  *
+- *  Should only be called for ICH9 devices.
++ *  Should only be called for ICH9 and ICH10 devices.
+  **/
+ void e1000e_disable_gig_wol_ich8lan(struct e1000_hw *hw)
+ {
+ 	u32 phy_ctrl;
+ 
+-	if (hw->mac.type == e1000_ich9lan) {
++	if ((hw->mac.type == e1000_ich10lan) ||
++	    (hw->mac.type == e1000_ich9lan)) {
+ 		phy_ctrl = er32(PHY_CTRL);
+ 		phy_ctrl |= E1000_PHY_CTRL_D0A_LPLU |
+ 		            E1000_PHY_CTRL_GBE_DISABLE;
+@@ -2270,6 +2354,39 @@ static s32 e1000_led_off_ich8lan(struct e1000_hw *hw)
+ }
+ 
+ /**
++ *  e1000_get_cfg_done_ich8lan - Read config done bit
++ *  @hw: pointer to the HW structure
++ *
++ *  Read the management control register for the config done bit for
++ *  completion status.  NOTE: silicon which is EEPROM-less will fail trying
++ *  to read the config done bit, so an error is *ONLY* logged and returns
++ *  E1000_SUCCESS.  If we were to return with error, EEPROM-less silicon
++ *  would not be able to be reset or change link.
++ **/
++static s32 e1000_get_cfg_done_ich8lan(struct e1000_hw *hw)
++{
++	u32 bank = 0;
++
++	e1000e_get_cfg_done(hw);
++
++	/* If EEPROM is not marked present, init the IGP 3 PHY manually */
++	if (hw->mac.type != e1000_ich10lan) {
++		if (((er32(EECD) & E1000_EECD_PRES) == 0) &&
++		    (hw->phy.type == e1000_phy_igp_3)) {
++			e1000e_phy_init_script_igp3(hw);
++		}
++	} else {
++		if (e1000_valid_nvm_bank_detect_ich8lan(hw, &bank)) {
++			/* Maybe we should do a basic PHY config */
++			hw_dbg(hw, "EEPROM not present\n");
++			return -E1000_ERR_CONFIG;
++		}
++	}
++
++	return 0;
++}
++
++/**
+  *  e1000_clear_hw_cntrs_ich8lan - Clear statistical counters
+  *  @hw: pointer to the HW structure
+  *
+@@ -2319,7 +2436,7 @@ static struct e1000_phy_operations ich8_phy_ops = {
+ 	.check_reset_block	= e1000_check_reset_block_ich8lan,
+ 	.commit_phy		= NULL,
+ 	.force_speed_duplex	= e1000_phy_force_speed_duplex_ich8lan,
+-	.get_cfg_done		= e1000e_get_cfg_done,
++	.get_cfg_done		= e1000_get_cfg_done_ich8lan,
+ 	.get_cable_length	= e1000e_get_cable_length_igp_2,
+ 	.get_phy_info		= e1000_get_phy_info_ich8lan,
+ 	.read_phy_reg		= e1000e_read_phy_reg_igp,
+@@ -2374,3 +2491,20 @@ struct e1000_info e1000_ich9_info = {
+ 	.nvm_ops		= &ich8_nvm_ops,
+ };
+ 
++struct e1000_info e1000_ich10_info = {
++	.mac			= e1000_ich10lan,
++	.flags			= FLAG_HAS_JUMBO_FRAMES
++				  | FLAG_IS_ICH
++				  | FLAG_HAS_WOL
++				  | FLAG_RX_CSUM_ENABLED
++				  | FLAG_HAS_CTRLEXT_ON_LOAD
++				  | FLAG_HAS_AMT
++				  | FLAG_HAS_ERT
++				  | FLAG_HAS_FLASH
++				  | FLAG_APME_IN_WUC,
++	.pba			= 10,
++	.get_variants		= e1000_get_variants_ich8lan,
++	.mac_ops		= &ich8_mac_ops,
++	.phy_ops		= &ich8_phy_ops,
++	.nvm_ops		= &ich8_nvm_ops,
++};
+diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
+index d2acf6f..14b72e6 100644
+--- a/drivers/net/e1000e/netdev.c
++++ b/drivers/net/e1000e/netdev.c
+@@ -59,6 +59,7 @@ static const struct e1000_info *e1000_info_tbl[] = {
+ 	[board_80003es2lan]	= &e1000_es2_info,
+ 	[board_ich8lan]		= &e1000_ich8_info,
+ 	[board_ich9lan]		= &e1000_ich9_info,
++	[board_ich10lan]	= &e1000_ich10_info,
+ };
+ 
+ #ifdef DEBUG
+@@ -3540,6 +3541,28 @@ static void e1000_watchdog_task(struct work_struct *work)
+ 						   &adapter->link_duplex);
+ 			e1000_print_link_info(adapter);
+ 			/*
++			 * On supported PHYs, check for duplex mismatch only
++			 * if link has autonegotiated at 10/100 half
++			 */
++			if ((hw->phy.type == e1000_phy_igp_3 ||
++			     hw->phy.type == e1000_phy_bm) &&
++			    (hw->mac.autoneg == true) &&
++			    (adapter->link_speed == SPEED_10 ||
++			     adapter->link_speed == SPEED_100) &&
++			    (adapter->link_duplex == HALF_DUPLEX)) {
++				u16 autoneg_exp;
++
++				e1e_rphy(hw, PHY_AUTONEG_EXP, &autoneg_exp);
++
++				if (!(autoneg_exp & NWAY_ER_LP_NWAY_CAPS))
++					ndev_info(netdev,
++					       "Autonegotiated half duplex but"
++					       " link partner cannot autoneg. "
++					       " Try forcing full duplex if "
++					       "link gets many collisions.\n");
++			}
++
++			/*
+ 			 * tweak tx_queue_len according to speed/duplex
+ 			 * and adjust the timeout factor
+ 			 */
+@@ -5098,6 +5121,9 @@ static struct pci_device_id e1000_pci_tbl[] = {
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LF), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_V), board_ich9lan },
+ 
++	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_D_BM_LM), board_ich10lan },
++	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_D_BM_LF), board_ich10lan },
++
+ 	{ }	/* terminate list */
+ };
+ MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
+diff --git a/drivers/net/e1000e/phy.c b/drivers/net/e1000e/phy.c
+index 5e988c9..6cd333a 100644
+--- a/drivers/net/e1000e/phy.c
++++ b/drivers/net/e1000e/phy.c
+@@ -1734,6 +1734,91 @@ s32 e1000e_get_cfg_done(struct e1000_hw *hw)
+ 	return 0;
+ }
+ 
++/**
++ *  e1000e_phy_init_script_igp3 - Inits the IGP3 PHY
++ *  @hw: pointer to the HW structure
++ *
++ *  Initializes a Intel Gigabit PHY3 when an EEPROM is not present.
++ **/
++s32 e1000e_phy_init_script_igp3(struct e1000_hw *hw)
++{
++	hw_dbg(hw, "Running IGP 3 PHY init script\n");
++
++	/* PHY init IGP 3 */
++	/* Enable rise/fall, 10-mode work in class-A */
++	e1e_wphy(hw, 0x2F5B, 0x9018);
++	/* Remove all caps from Replica path filter */
++	e1e_wphy(hw, 0x2F52, 0x0000);
++	/* Bias trimming for ADC, AFE and Driver (Default) */
++	e1e_wphy(hw, 0x2FB1, 0x8B24);
++	/* Increase Hybrid poly bias */
++	e1e_wphy(hw, 0x2FB2, 0xF8F0);
++	/* Add 4% to Tx amplitude in Gig mode */
++	e1e_wphy(hw, 0x2010, 0x10B0);
++	/* Disable trimming (TTT) */
++	e1e_wphy(hw, 0x2011, 0x0000);
++	/* Poly DC correction to 94.6% + 2% for all channels */
++	e1e_wphy(hw, 0x20DD, 0x249A);
++	/* ABS DC correction to 95.9% */
++	e1e_wphy(hw, 0x20DE, 0x00D3);
++	/* BG temp curve trim */
++	e1e_wphy(hw, 0x28B4, 0x04CE);
++	/* Increasing ADC OPAMP stage 1 currents to max */
++	e1e_wphy(hw, 0x2F70, 0x29E4);
++	/* Force 1000 ( required for enabling PHY regs configuration) */
++	e1e_wphy(hw, 0x0000, 0x0140);
++	/* Set upd_freq to 6 */
++	e1e_wphy(hw, 0x1F30, 0x1606);
++	/* Disable NPDFE */
++	e1e_wphy(hw, 0x1F31, 0xB814);
++	/* Disable adaptive fixed FFE (Default) */
++	e1e_wphy(hw, 0x1F35, 0x002A);
++	/* Enable FFE hysteresis */
++	e1e_wphy(hw, 0x1F3E, 0x0067);
++	/* Fixed FFE for short cable lengths */
++	e1e_wphy(hw, 0x1F54, 0x0065);
++	/* Fixed FFE for medium cable lengths */
++	e1e_wphy(hw, 0x1F55, 0x002A);
++	/* Fixed FFE for long cable lengths */
++	e1e_wphy(hw, 0x1F56, 0x002A);
++	/* Enable Adaptive Clip Threshold */
++	e1e_wphy(hw, 0x1F72, 0x3FB0);
++	/* AHT reset limit to 1 */
++	e1e_wphy(hw, 0x1F76, 0xC0FF);
++	/* Set AHT master delay to 127 msec */
++	e1e_wphy(hw, 0x1F77, 0x1DEC);
++	/* Set scan bits for AHT */
++	e1e_wphy(hw, 0x1F78, 0xF9EF);
++	/* Set AHT Preset bits */
++	e1e_wphy(hw, 0x1F79, 0x0210);
++	/* Change integ_factor of channel A to 3 */
++	e1e_wphy(hw, 0x1895, 0x0003);
++	/* Change prop_factor of channels BCD to 8 */
++	e1e_wphy(hw, 0x1796, 0x0008);
++	/* Change cg_icount + enable integbp for channels BCD */
++	e1e_wphy(hw, 0x1798, 0xD008);
++	/*
++	 * Change cg_icount + enable integbp + change prop_factor_master
++	 * to 8 for channel A
++	 */
++	e1e_wphy(hw, 0x1898, 0xD918);
++	/* Disable AHT in Slave mode on channel A */
++	e1e_wphy(hw, 0x187A, 0x0800);
++	/*
++	 * Enable LPLU and disable AN to 1000 in non-D0a states,
++	 * Enable SPD+B2B
++	 */
++	e1e_wphy(hw, 0x0019, 0x008D);
++	/* Enable restart AN on an1000_dis change */
++	e1e_wphy(hw, 0x001B, 0x2080);
++	/* Enable wh_fifo read clock in 10/100 modes */
++	e1e_wphy(hw, 0x0014, 0x0045);
++	/* Restart AN, Speed selection is 1000 */
++	e1e_wphy(hw, 0x0000, 0x1340);
++
++	return 0;
++}
++
+ /* Internal function pointers */
+ 
+ /**
+-- 
+1.7.1
+

Added: dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-82583-device-id.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-82583-device-id.patch	Fri Aug 27 02:41:21 2010	(r16186)
@@ -0,0 +1,386 @@
+From 1a7d103c21184d254a117c412e727633faf99572 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Fri, 27 Aug 2010 02:17:45 +0100
+Subject: [PATCH 3/3] e1000e: add support for 82583 device id
+
+commit 8c81c9c315b7e7e240906fab0e8dde1595101bd2 upstream.
+
+Add device ID and related support for 82583 mac.
+
+Signed-off-by: Alexander Duyck <alexander.h.duyck at intel.com>
+Acked-by: Radheka Godse <radheka.godse at intel.com>
+Acked-by: Bruce Allan <bruce.w.allan at intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+[bwh: Backport to Debian lenny]
+---
+ drivers/net/e1000e/82571.c   |  129 +++++++++++++++++++++++++++++++++++-------
+ drivers/net/e1000e/e1000.h   |    2 +
+ drivers/net/e1000e/ethtool.c |    1 +
+ drivers/net/e1000e/hw.h      |    2 +
+ drivers/net/e1000e/netdev.c  |    4 +-
+ 5 files changed, 116 insertions(+), 22 deletions(-)
+
+diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c
+index b2c910c..709c4ba 100644
+--- a/drivers/net/e1000e/82571.c
++++ b/drivers/net/e1000e/82571.c
+@@ -39,6 +39,7 @@
+  * 82573E Gigabit Ethernet Controller (Copper)
+  * 82573L Gigabit Ethernet Controller
+  * 82574L Gigabit Network Connection
++ * 82583V Gigabit Network Connection
+  */
+ 
+ #include <linux/netdevice.h>
+@@ -98,6 +99,7 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
+ 		phy->type		 = e1000_phy_m88;
+ 		break;
+ 	case e1000_82574:
++	case e1000_82583:
+ 		phy->type		 = e1000_phy_bm;
+ 		break;
+ 	default:
+@@ -120,6 +122,7 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
+ 			return -E1000_ERR_PHY;
+ 		break;
+ 	case e1000_82574:
++	case e1000_82583:
+ 		if (phy->id != BME1000_E_PHY_ID_R2)
+ 			return -E1000_ERR_PHY;
+ 		break;
+@@ -163,6 +166,7 @@ static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
+ 	switch (hw->mac.type) {
+ 	case e1000_82573:
+ 	case e1000_82574:
++	case e1000_82583:
+ 		if (((eecd >> 15) & 0x3) == 0x3) {
+ 			nvm->type = e1000_nvm_flash_hw;
+ 			nvm->word_size = 2048;
+@@ -260,6 +264,7 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
+ 
+ 	switch (hw->mac.type) {
+ 	case e1000_82574:
++	case e1000_82583:
+ 		func->check_mng_mode = e1000_check_mng_mode_82574;
+ 		func->led_on = e1000_led_on_82574;
+ 		break;
+@@ -372,6 +377,7 @@ static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
+ 		return e1000e_get_phy_id(hw);
+ 		break;
+ 	case e1000_82574:
++	case e1000_82583:
+ 		ret_val = e1e_rphy(hw, PHY_ID1, &phy_id);
+ 		if (ret_val)
+ 			return ret_val;
+@@ -461,8 +467,15 @@ static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
+ 	if (ret_val)
+ 		return ret_val;
+ 
+-	if (hw->mac.type != e1000_82573 && hw->mac.type != e1000_82574)
++	switch (hw->mac.type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
++		break;
++	default:
+ 		ret_val = e1000e_acquire_nvm(hw);
++		break;
++	}
+ 
+ 	if (ret_val)
+ 		e1000_put_hw_semaphore_82571(hw);
+@@ -502,6 +515,7 @@ static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
+ 	switch (hw->mac.type) {
+ 	case e1000_82573:
+ 	case e1000_82574:
++	case e1000_82583:
+ 		ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
+ 		break;
+ 	case e1000_82571:
+@@ -776,7 +790,10 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
+ 	 * Must acquire the MDIO ownership before MAC reset.
+ 	 * Ownership defaults to firmware after a reset.
+ 	 */
+-	if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
++	switch (hw->mac.type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
+ 		extcnf_ctrl = er32(EXTCNF_CTRL);
+ 		extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
+ 
+@@ -792,6 +809,9 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
+ 			msleep(2);
+ 			i++;
+ 		} while (i < MDIO_OWNERSHIP_TIMEOUT);
++		break;
++	default:
++		break;
+ 	}
+ 
+ 	ctrl = er32(CTRL);
+@@ -817,8 +837,16 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
+ 	 * Need to wait for Phy configuration completion before accessing
+ 	 * NVM and Phy.
+ 	 */
+-	if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574)
++
++	switch (hw->mac.type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
+ 		msleep(25);
++		break;
++	default:
++		break;
++	}
+ 
+ 	/* Clear any pending interrupt events. */
+ 	ew32(IMC, 0xffffffff);
+@@ -884,17 +912,22 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw)
+ 	ew32(TXDCTL(0), reg_data);
+ 
+ 	/* ...for both queues. */
+-	if (mac->type != e1000_82573 && mac->type != e1000_82574) {
++	switch (mac->type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
++		e1000e_enable_tx_pkt_filtering(hw);
++		reg_data = er32(GCR);
++		reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
++		ew32(GCR, reg_data);
++		break;
++	default:
+ 		reg_data = er32(TXDCTL(1));
+ 		reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
+ 			   E1000_TXDCTL_FULL_TX_DESC_WB |
+ 			   E1000_TXDCTL_COUNT_DESC;
+ 		ew32(TXDCTL(1), reg_data);
+-	} else {
+-		e1000e_enable_tx_pkt_filtering(hw);
+-		reg_data = er32(GCR);
+-		reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
+-		ew32(GCR, reg_data);
++		break;
+ 	}
+ 
+ 	/*
+@@ -959,25 +992,42 @@ static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
+ 	}
+ 
+ 	/* Device Control */
+-	if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
++	switch (hw->mac.type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
+ 		reg = er32(CTRL);
+ 		reg &= ~(1 << 29);
+ 		ew32(CTRL, reg);
++		break;
++	default:
++		break;
+ 	}
+ 
+ 	/* Extended Device Control */
+-	if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
++	switch (hw->mac.type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
+ 		reg = er32(CTRL_EXT);
+ 		reg &= ~(1 << 23);
+ 		reg |= (1 << 22);
+ 		ew32(CTRL_EXT, reg);
++		break;
++	default:
++		break;
+ 	}
+ 
+ 	/* PCI-Ex Control Register */
+-	if (hw->mac.type == e1000_82574) {
++	switch (hw->mac.type) {
++	case e1000_82574:
++	case e1000_82583:
+ 		reg = er32(GCR);
+ 		reg |= (1 << 22);
+ 		ew32(GCR, reg);
++		break;
++	default:
++		break;
+ 	}
+ 
+ 	return;
+@@ -997,7 +1047,10 @@ void e1000e_clear_vfta(struct e1000_hw *hw)
+ 	u32 vfta_offset = 0;
+ 	u32 vfta_bit_in_reg = 0;
+ 
+-	if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
++	switch (hw->mac.type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
+ 		if (hw->mng_cookie.vlan_id != 0) {
+ 			/*
+ 			 * The VFTA is a 4096b bit-field, each identifying
+@@ -1012,6 +1065,9 @@ void e1000e_clear_vfta(struct e1000_hw *hw)
+ 			vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
+ 					       E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
+ 		}
++		break;
++	default:
++		break;
+ 	}
+ 	for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
+ 		/*
+@@ -1110,9 +1166,16 @@ static s32 e1000_setup_link_82571(struct e1000_hw *hw)
+ 	 * the default flow control setting, so we explicitly
+ 	 * set it to full.
+ 	 */
+-	if ((hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) &&
+-	    hw->fc.type == e1000_fc_default)
+-		hw->fc.type = e1000_fc_full;
++	switch (hw->mac.type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
++		if (hw->fc.type == e1000_fc_default)
++			hw->fc.type = e1000_fc_full;
++		break;
++	default:
++		break;
++	}
+ 
+ 	return e1000e_setup_link(hw);
+ }
+@@ -1208,11 +1271,19 @@ static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
+ 		return ret_val;
+ 	}
+ 
+-	if ((hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) &&
+-	    *data == ID_LED_RESERVED_F746)
+-		*data = ID_LED_DEFAULT_82573;
+-	else if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF)
+-		*data = ID_LED_DEFAULT;
++	switch (hw->mac.type) {
++	case e1000_82573:
++	case e1000_82574:
++	case e1000_82583:
++		if (*data == ID_LED_RESERVED_F746)
++			*data = ID_LED_DEFAULT_82573;
++		break;
++	default:
++		if (*data == ID_LED_RESERVED_0000 ||
++		    *data == ID_LED_RESERVED_FFFF)
++			*data = ID_LED_DEFAULT;
++		break;
++	}
+ 
+ 	return 0;
+ }
+@@ -1502,3 +1573,19 @@ struct e1000_info e1000_82574_info = {
+ 	.nvm_ops		= &e82571_nvm_ops,
+ };
+ 
++struct e1000_info e1000_82583_info = {
++	.mac			= e1000_82583,
++	.flags			= FLAG_HAS_HW_VLAN_FILTER
++				  | FLAG_HAS_WOL
++				  | FLAG_APME_IN_CTRL3
++				  | FLAG_RX_CSUM_ENABLED
++				  | FLAG_HAS_SMART_POWER_DOWN
++				  | FLAG_HAS_AMT
++				  | FLAG_HAS_CTRLEXT_ON_LOAD,
++	.pba			= 20,
++	.get_variants		= e1000_get_variants_82571,
++	.mac_ops		= &e82571_mac_ops,
++	.phy_ops		= &e82_phy_ops_bm,
++	.nvm_ops		= &e82571_nvm_ops,
++};
++
+diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h
+index 7ade589..cfb3342 100644
+--- a/drivers/net/e1000e/e1000.h
++++ b/drivers/net/e1000e/e1000.h
+@@ -100,6 +100,7 @@ enum e1000_boards {
+ 	board_82572,
+ 	board_82573,
+ 	board_82574,
++	board_82583,
+ 	board_80003es2lan,
+ 	board_ich8lan,
+ 	board_ich9lan,
+@@ -395,6 +396,7 @@ extern struct e1000_info e1000_82571_info;
+ extern struct e1000_info e1000_82572_info;
+ extern struct e1000_info e1000_82573_info;
+ extern struct e1000_info e1000_82574_info;
++extern struct e1000_info e1000_82583_info;
+ extern struct e1000_info e1000_ich8_info;
+ extern struct e1000_info e1000_ich9_info;
+ extern struct e1000_info e1000_ich10_info;
+diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
+index 2497ae2..b76e036 100644
+--- a/drivers/net/e1000e/ethtool.c
++++ b/drivers/net/e1000e/ethtool.c
+@@ -787,6 +787,7 @@ static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
+ 		break;
+ 	case e1000_82573:
+ 	case e1000_82574:
++	case e1000_82583:
+ 	case e1000_ich8lan:
+ 	case e1000_ich9lan:
+ 	case e1000_ich10lan:
+diff --git a/drivers/net/e1000e/hw.h b/drivers/net/e1000e/hw.h
+index f66ed37..dec7d6b 100644
+--- a/drivers/net/e1000e/hw.h
++++ b/drivers/net/e1000e/hw.h
+@@ -337,6 +337,7 @@ enum e1e_registers {
+ #define E1000_DEV_ID_82573E_IAMT		0x108C
+ #define E1000_DEV_ID_82573L			0x109A
+ #define E1000_DEV_ID_82574L			0x10D3
++#define E1000_DEV_ID_82583V                     0x150C
+ 
+ #define E1000_DEV_ID_80003ES2LAN_COPPER_DPT	0x1096
+ #define E1000_DEV_ID_80003ES2LAN_SERDES_DPT	0x1098
+@@ -374,6 +375,7 @@ enum e1000_mac_type {
+ 	e1000_82572,
+ 	e1000_82573,
+ 	e1000_82574,
++	e1000_82583,
+ 	e1000_80003es2lan,
+ 	e1000_ich8lan,
+ 	e1000_ich9lan,
+diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
+index 14b72e6..1bbf291 100644
+--- a/drivers/net/e1000e/netdev.c
++++ b/drivers/net/e1000e/netdev.c
+@@ -56,6 +56,7 @@ static const struct e1000_info *e1000_info_tbl[] = {
+ 	[board_82572]		= &e1000_82572_info,
+ 	[board_82573]		= &e1000_82573_info,
+ 	[board_82574]		= &e1000_82574_info,
++	[board_82583]		= &e1000_82583_info,
+ 	[board_80003es2lan]	= &e1000_es2_info,
+ 	[board_ich8lan]		= &e1000_ich8_info,
+ 	[board_ich9lan]		= &e1000_ich9_info,
+@@ -3323,7 +3324,7 @@ void e1000e_update_stats(struct e1000_adapter *adapter)
+ 
+ 	adapter->stats.algnerrc += er32(ALGNERRC);
+ 	adapter->stats.rxerrc += er32(RXERRC);
+-	if (hw->mac.type != e1000_82574)
++	if ((hw->mac.type != e1000_82574) && (hw->mac.type != e1000_82583))
+ 		adapter->stats.tncrs += er32(TNCRS);
+ 	adapter->stats.cexterr += er32(CEXTERR);
+ 	adapter->stats.tsctc += er32(TSCTC);
+@@ -5089,6 +5090,7 @@ static struct pci_device_id e1000_pci_tbl[] = {
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82573L), board_82573 },
+ 
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82574L), board_82574 },
++	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82583V), board_82583 },
+ 
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_80003ES2LAN_COPPER_DPT),
+ 	  board_80003es2lan },
+-- 
+1.7.1
+

Added: dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-the-82567LM-4-device.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/lenny/linux-2.6/debian/patches/features/all/e1000e/e1000e-add-support-for-the-82567LM-4-device.patch	Fri Aug 27 02:41:21 2010	(r16186)
@@ -0,0 +1,58 @@
+From e9a36ef34da183dd6928850e865aad3574754ee9 Mon Sep 17 00:00:00 2001
+From: Bruce Allan <bruce.w.allan at intel.com>
+Date: Tue, 26 Aug 2008 18:36:36 -0700
+Subject: [PATCH 1/3] e1000e: add support for the 82567LM-4 device
+
+commit 2f15f9d60190a62bc8ac50fa84fea31fc0b00ecf upstream.
+
+Enable PCI device ID for a new combination of MAC and PHY already supported
+in the driver.
+
+Signed-off-by: Bruce Allan <bruce.w.allan at intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
+Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
+---
+ drivers/net/e1000e/hw.h      |    1 +
+ drivers/net/e1000e/ich8lan.c |    1 +
+ drivers/net/e1000e/netdev.c  |    1 +
+ 3 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/net/e1000e/hw.h b/drivers/net/e1000e/hw.h
+index dfc43af..338f7c1 100644
+--- a/drivers/net/e1000e/hw.h
++++ b/drivers/net/e1000e/hw.h
+@@ -351,6 +351,7 @@ enum e1e_registers {
+ #define E1000_DEV_ID_ICH8_IFE_G			0x10C5
+ #define E1000_DEV_ID_ICH8_IGP_M			0x104D
+ #define E1000_DEV_ID_ICH9_IGP_AMT		0x10BD
++#define E1000_DEV_ID_ICH9_BM			0x10E5
+ #define E1000_DEV_ID_ICH9_IGP_M_AMT		0x10F5
+ #define E1000_DEV_ID_ICH9_IGP_M			0x10BF
+ #define E1000_DEV_ID_ICH9_IGP_M_V		0x10CB
+diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
+index 7fad6c1..94e4dfd 100644
+--- a/drivers/net/e1000e/ich8lan.c
++++ b/drivers/net/e1000e/ich8lan.c
+@@ -44,6 +44,7 @@
+  * 82567LF-2 Gigabit Network Connection
+  * 82567V-2 Gigabit Network Connection
+  * 82562GT-3 10/100 Network Connection
++ * 82567LM-4 Gigabit Network Connection
+  */
+ 
+ #include <linux/netdevice.h>
+diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
+index c1bffdf..d2acf6f 100644
+--- a/drivers/net/e1000e/netdev.c
++++ b/drivers/net/e1000e/netdev.c
+@@ -5089,6 +5089,7 @@ static struct pci_device_id e1000_pci_tbl[] = {
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE_GT), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_AMT), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_C), board_ich9lan },
++	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_BM), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_AMT), board_ich9lan },
+ 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_V), board_ich9lan },
+-- 
+1.7.1
+

Modified: dists/lenny/linux-2.6/debian/patches/series/25
==============================================================================
--- dists/lenny/linux-2.6/debian/patches/series/25	Wed Aug 25 12:26:26 2010	(r16185)
+++ dists/lenny/linux-2.6/debian/patches/series/25	Fri Aug 27 02:41:21 2010	(r16186)
@@ -1,4 +1,6 @@
 + bugfix/all/pid_ns-zap_pid_ns_processes-fix-the-child_reaper.patch
 + bugfix/all/pid_ns-change-child_reaper-when-init-group_leader-exits.patch
 + bugfix/all/parport-quickfix-proc-registration.patch
-
++ features/all/e1000e/e1000e-add-support-for-82583-device-id.patch
++ features/all/e1000e/e1000e-add-support-for-the-82567LM-4-device.patch
++ features/all/e1000e/e1000e-add-support-for-82567LM-3-and-82567LF-3-ICH10.patch



More information about the Kernel-svn-changes mailing list