diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c index 820415d71c62..daf348c63715 100644 --- a/sys/dev/re/if_re.c +++ b/sys/dev/re/if_re.c @@ -177,6 +177,8 @@ static struct rl_type re_devs[] = { "RealTek 8110S Single-chip Gigabit Ethernet" }, { COREGA_VENDORID, COREGA_DEVICEID_CGLAPCIGT, RL_HWREV_8169S, "Corega CG-LAPCIGT (RTL8169S) Gigabit Ethernet" }, + { LINKSYS_VENDORID, LINKSYS_DEVICEID_EG1032, RL_HWREV_8169S, + "Linksys EG1032 (RTL8169S) Gigabit Ethernet" }, { 0, 0, 0, NULL } }; @@ -826,6 +828,17 @@ re_probe(dev) while (t->rl_name != NULL) { if ((pci_get_vendor(dev) == t->rl_vid) && (pci_get_device(dev) == t->rl_did)) { + /* + * Only attach to rev. 3 of the Linksys EG1032 adapter. + * Rev. 2 i supported by sk(4). + */ + if ((t->rl_vid == LINKSYS_VENDORID) && + (t->rl_did == LINKSYS_DEVICEID_EG1032) && + (pci_get_subdevice(dev) != + LINKSYS_SUBDEVICE_EG1032_REV3)) { + t++; + continue; + } /* * Temporarily map the I/O space diff --git a/sys/dev/sk/if_sk.c b/sys/dev/sk/if_sk.c index d83630ef97c4..3b89e501920b 100644 --- a/sys/dev/sk/if_sk.c +++ b/sys/dev/sk/if_sk.c @@ -1312,6 +1312,17 @@ skc_probe(dev) while(t->sk_name != NULL) { if ((pci_get_vendor(dev) == t->sk_vid) && (pci_get_device(dev) == t->sk_did)) { + /* + * Only attach to rev. 2 of the Linksys EG1032 adapter. + * Rev. 3 is supported by re(4). + */ + if ((t->sk_vid == VENDORID_LINKSYS) && + (t->sk_did == DEVICEID_LINKSYS_EG1032) && + (pci_get_subdevice(dev) != + SUBDEVICEID_LINKSYS_EG1032_REV2)) { + t++; + continue; + } device_set_desc(dev, t->sk_name); return (BUS_PROBE_DEFAULT); } diff --git a/sys/dev/sk/if_skreg.h b/sys/dev/sk/if_skreg.h index e8b6b8ae45c5..1c7158eca866 100644 --- a/sys/dev/sk/if_skreg.h +++ b/sys/dev/sk/if_skreg.h @@ -103,6 +103,11 @@ */ #define DEVICEID_LINKSYS_EG1032 0x1032 +/* + * Linksys gigabit ethernet rev 2 sub-device ID + */ +#define SUBDEVICEID_LINKSYS_EG1032_REV2 0x0015 + /* * D-Link PCI vendor ID */ diff --git a/sys/pci/if_rlreg.h b/sys/pci/if_rlreg.h index c8b3c0b6c968..6c8765981fee 100644 --- a/sys/pci/if_rlreg.h +++ b/sys/pci/if_rlreg.h @@ -812,18 +812,33 @@ struct rl_softc { /* * Corega FEther CB-TXD device ID */ -#define COREGA_DEVICEID_FETHERCBTXD 0xa117 +#define COREGA_DEVICEID_FETHERCBTXD 0xa117 /* * Corega FEtherII CB-TXD device ID */ -#define COREGA_DEVICEID_FETHERIICBTXD 0xa11e +#define COREGA_DEVICEID_FETHERIICBTXD 0xa11e /* * Corega CG-LAPCIGT device ID */ #define COREGA_DEVICEID_CGLAPCIGT 0xc107 +/* + * Linksys vendor ID + */ +#define LINKSYS_VENDORID 0x1737 + +/* + * Linksys EG1032 device ID + */ +#define LINKSYS_DEVICEID_EG1032 0x1032 + +/* + * Linksys EG1032 rev 3 sub-device ID + */ +#define LINKSYS_SUBDEVICE_EG1032_REV3 0x0024 + /* * Peppercon vendor ID */ diff --git a/sys/pci/if_sk.c b/sys/pci/if_sk.c index d83630ef97c4..3b89e501920b 100644 --- a/sys/pci/if_sk.c +++ b/sys/pci/if_sk.c @@ -1312,6 +1312,17 @@ skc_probe(dev) while(t->sk_name != NULL) { if ((pci_get_vendor(dev) == t->sk_vid) && (pci_get_device(dev) == t->sk_did)) { + /* + * Only attach to rev. 2 of the Linksys EG1032 adapter. + * Rev. 3 is supported by re(4). + */ + if ((t->sk_vid == VENDORID_LINKSYS) && + (t->sk_did == DEVICEID_LINKSYS_EG1032) && + (pci_get_subdevice(dev) != + SUBDEVICEID_LINKSYS_EG1032_REV2)) { + t++; + continue; + } device_set_desc(dev, t->sk_name); return (BUS_PROBE_DEFAULT); } diff --git a/sys/pci/if_skreg.h b/sys/pci/if_skreg.h index e8b6b8ae45c5..1c7158eca866 100644 --- a/sys/pci/if_skreg.h +++ b/sys/pci/if_skreg.h @@ -103,6 +103,11 @@ */ #define DEVICEID_LINKSYS_EG1032 0x1032 +/* + * Linksys gigabit ethernet rev 2 sub-device ID + */ +#define SUBDEVICEID_LINKSYS_EG1032_REV2 0x0015 + /* * D-Link PCI vendor ID */