Skip to content

Commit 60e2331

Browse files
committed
[net] Gracefully handle shared e1000/1000e driver PCI ID's
Both the old e1000 driver and the new e1000e driver can drive some PCI-Express e1000 cards, and we should avoid ambiguity about which driver will pick up the support for those cards when both drivers are enabled. This solves the problem by having the old driver support those cards if the new driver isn't configured, but otherwise ceding support for PCI Express versions of the e1000 chipset to the newer driver. Thus allowing both legacy configurations where only the old driver is active (and handles all chips it knows about) and the new configuration with the new driver handling the more modern PCIE variants. Acked-by: Jeff Garzik <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 44c45eb commit 60e2331

File tree

2 files changed

+37
-28
lines changed

2 files changed

+37
-28
lines changed

drivers/net/Kconfig

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1992,7 +1992,7 @@ config E1000_DISABLE_PACKET_SPLIT
19921992

19931993
config E1000E
19941994
tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
1995-
depends on PCI && EXPERIMENTAL
1995+
depends on PCI
19961996
---help---
19971997
This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
19981998
ethernet family of adapters. For PCI or PCI-X e1000 adapters,
@@ -2009,6 +2009,9 @@ config E1000E
20092009
To compile this driver as a module, choose M here. The module
20102010
will be called e1000e.
20112011

2012+
config E1000E_ENABLED
2013+
def_bool E1000E != n
2014+
20122015
config IP1000
20132016
tristate "IP1000 Gigabit Ethernet support"
20142017
depends on PCI && EXPERIMENTAL

drivers/net/e1000/e1000_main.c

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation
4747
* Macro expands to...
4848
* {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}
4949
*/
50+
#ifdef CONFIG_E1000E_ENABLED
51+
#define PCIE(x)
52+
#else
53+
#define PCIE(x) x,
54+
#endif
55+
5056
static struct pci_device_id e1000_pci_tbl[] = {
5157
INTEL_E1000_ETHERNET_DEVICE(0x1000),
5258
INTEL_E1000_ETHERNET_DEVICE(0x1001),
@@ -73,14 +79,14 @@ static struct pci_device_id e1000_pci_tbl[] = {
7379
INTEL_E1000_ETHERNET_DEVICE(0x1026),
7480
INTEL_E1000_ETHERNET_DEVICE(0x1027),
7581
INTEL_E1000_ETHERNET_DEVICE(0x1028),
76-
INTEL_E1000_ETHERNET_DEVICE(0x1049),
77-
INTEL_E1000_ETHERNET_DEVICE(0x104A),
78-
INTEL_E1000_ETHERNET_DEVICE(0x104B),
79-
INTEL_E1000_ETHERNET_DEVICE(0x104C),
80-
INTEL_E1000_ETHERNET_DEVICE(0x104D),
81-
INTEL_E1000_ETHERNET_DEVICE(0x105E),
82-
INTEL_E1000_ETHERNET_DEVICE(0x105F),
83-
INTEL_E1000_ETHERNET_DEVICE(0x1060),
82+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1049))
83+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x104A))
84+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x104B))
85+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x104C))
86+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x104D))
87+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x105E))
88+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x105F))
89+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1060))
8490
INTEL_E1000_ETHERNET_DEVICE(0x1075),
8591
INTEL_E1000_ETHERNET_DEVICE(0x1076),
8692
INTEL_E1000_ETHERNET_DEVICE(0x1077),
@@ -89,28 +95,28 @@ static struct pci_device_id e1000_pci_tbl[] = {
8995
INTEL_E1000_ETHERNET_DEVICE(0x107A),
9096
INTEL_E1000_ETHERNET_DEVICE(0x107B),
9197
INTEL_E1000_ETHERNET_DEVICE(0x107C),
92-
INTEL_E1000_ETHERNET_DEVICE(0x107D),
93-
INTEL_E1000_ETHERNET_DEVICE(0x107E),
94-
INTEL_E1000_ETHERNET_DEVICE(0x107F),
98+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x107D))
99+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x107E))
100+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x107F))
95101
INTEL_E1000_ETHERNET_DEVICE(0x108A),
96-
INTEL_E1000_ETHERNET_DEVICE(0x108B),
97-
INTEL_E1000_ETHERNET_DEVICE(0x108C),
98-
INTEL_E1000_ETHERNET_DEVICE(0x1096),
99-
INTEL_E1000_ETHERNET_DEVICE(0x1098),
102+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x108B))
103+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x108C))
104+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1096))
105+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1098))
100106
INTEL_E1000_ETHERNET_DEVICE(0x1099),
101-
INTEL_E1000_ETHERNET_DEVICE(0x109A),
102-
INTEL_E1000_ETHERNET_DEVICE(0x10A4),
103-
INTEL_E1000_ETHERNET_DEVICE(0x10A5),
107+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x109A))
108+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10A4))
109+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10A5))
104110
INTEL_E1000_ETHERNET_DEVICE(0x10B5),
105-
INTEL_E1000_ETHERNET_DEVICE(0x10B9),
106-
INTEL_E1000_ETHERNET_DEVICE(0x10BA),
107-
INTEL_E1000_ETHERNET_DEVICE(0x10BB),
108-
INTEL_E1000_ETHERNET_DEVICE(0x10BC),
109-
INTEL_E1000_ETHERNET_DEVICE(0x10C4),
110-
INTEL_E1000_ETHERNET_DEVICE(0x10C5),
111-
INTEL_E1000_ETHERNET_DEVICE(0x10D5),
112-
INTEL_E1000_ETHERNET_DEVICE(0x10D9),
113-
INTEL_E1000_ETHERNET_DEVICE(0x10DA),
111+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10B9))
112+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10BA))
113+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10BB))
114+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10BC))
115+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10C4))
116+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10C5))
117+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10D5))
118+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10D9))
119+
PCIE( INTEL_E1000_ETHERNET_DEVICE(0x10DA))
114120
/* required last entry */
115121
{0,}
116122
};

0 commit comments

Comments
 (0)