Linksys EG1032 rev. 3 patch

Matthew N. Dodd mdodd at FreeBSD.ORG
Sun Oct 2 10:48:42 PDT 2005


On Sun, 2 Oct 2005, Scott Long wrote:
> Sounds like the if_sk driver needs to be made more intelligent so that 
> it doesn't try to claim this card, yes?

I found the attached patch in my local tree.

Curious to know if it works as I don't have the hardware.

-- 
10 40 80 C0 00 FF FF FF FF C0 00 00 00 00 10 AA AA 03 00 00 00 08 00
-------------- next part --------------
Index: pci/if_sk.c
===================================================================
RCS file: /home/cvs/src/sys/pci/if_sk.c,v
retrieving revision 1.109
diff -u -u -r1.109 if_sk.c
--- pci/if_sk.c	13 Aug 2005 11:13:12 -0000	1.109
+++ pci/if_sk.c	2 Oct 2005 17:45:08 -0000
@@ -142,40 +142,45 @@
 static struct sk_type sk_devs[] = {
 	{
 		VENDORID_SK,
-		DEVICEID_SK_V1,
+		DEVICEID_SK_V1, -1,
 		"SysKonnect Gigabit Ethernet (V1.0)"
 	},
 	{
 		VENDORID_SK,
-		DEVICEID_SK_V2,
+		DEVICEID_SK_V2, -1,
 		"SysKonnect Gigabit Ethernet (V2.0)"
 	},
 	{
 		VENDORID_MARVELL,
-		DEVICEID_SK_V2,
+		DEVICEID_SK_V2, -1,
 		"Marvell Gigabit Ethernet"
 	},
 	{
 		VENDORID_MARVELL,
-		DEVICEID_BELKIN_5005,
+		DEVICEID_BELKIN_5005, -1,
 		"Belkin F5D5005 Gigabit Ethernet"
 	},
 	{
 		VENDORID_3COM,
-		DEVICEID_3COM_3C940,
+		DEVICEID_3COM_3C940, -1,
 		"3Com 3C940 Gigabit Ethernet"
 	},
 	{
 		VENDORID_LINKSYS,
-		DEVICEID_LINKSYS_EG1032,
-		"Linksys EG1032 Gigabit Ethernet"
+		DEVICEID_LINKSYS_EG1032, 0x0,
+		"Linksys EG1032 v1 Gigabit Ethernet"
+	},
+	{
+		VENDORID_LINKSYS,
+		DEVICEID_LINKSYS_EG1032, 0x1,
+		"Linksys EG1032 v2 Gigabit Ethernet"
 	},
 	{
 		VENDORID_DLINK,
-		DEVICEID_DLINK_DGE530T,
+		DEVICEID_DLINK_DGE530T, -1,
 		"D-Link DGE-530T Gigabit Ethernet"
 	},
-	{ 0, 0, NULL }
+	{ 0, 0, 0, NULL }
 };
 
 static int skc_probe(device_t);
@@ -1311,7 +1316,9 @@
 
 	while(t->sk_name != NULL) {
 		if ((pci_get_vendor(dev) == t->sk_vid) &&
-		    (pci_get_device(dev) == t->sk_did)) {
+		    (pci_get_device(dev) == t->sk_did) &&
+		    ((t->sk_rid == -1) ||   
+		      (pci_get_revid(dev) == t->sk_rid))) {
 			device_set_desc(dev, t->sk_name);
 			return (BUS_PROBE_DEFAULT);
 		}
Index: pci/if_skreg.h
===================================================================
RCS file: /home/cvs/src/sys/pci/if_skreg.h,v
retrieving revision 1.29
diff -u -u -r1.29 if_skreg.h
--- pci/if_skreg.h	10 Jun 2005 16:49:23 -0000	1.29
+++ pci/if_skreg.h	2 Oct 2005 17:45:25 -0000
@@ -1300,6 +1300,7 @@
 struct sk_type {
 	u_int16_t		sk_vid;
 	u_int16_t		sk_did;
+	int			sk_rid;
 	char			*sk_name;
 };
 
Index: dev/re/if_re.c
===================================================================
RCS file: /home/cvs/src/sys/dev/re/if_re.c,v
retrieving revision 1.51
diff -u -u -r1.51 if_re.c
--- dev/re/if_re.c	18 Aug 2005 18:36:39 -0000	1.51
+++ dev/re/if_re.c	2 Oct 2005 17:46:34 -0000
@@ -159,21 +159,23 @@
  * Various supported device vendors/types and their names.
  */
 static struct rl_type re_devs[] = {
-	{ DLINK_VENDORID, DLINK_DEVICEID_528T, RL_HWREV_8169S,
+	{ DLINK_VENDORID, DLINK_DEVICEID_528T, -1, RL_HWREV_8169S,
 		"D-Link DGE-528(T) Gigabit Ethernet Adapter" },
-	{ RT_VENDORID, RT_DEVICEID_8139, RL_HWREV_8139CPLUS,
+	{ RT_VENDORID, RT_DEVICEID_8139, -1, RL_HWREV_8139CPLUS,
 		"RealTek 8139C+ 10/100BaseTX" },
-	{ RT_VENDORID, RT_DEVICEID_8169, RL_HWREV_8169,
+	{ RT_VENDORID, RT_DEVICEID_8169, -1, RL_HWREV_8169,
 		"RealTek 8169 Gigabit Ethernet" },
-	{ RT_VENDORID, RT_DEVICEID_8169, RL_HWREV_8169S,
+	{ RT_VENDORID, RT_DEVICEID_8169, -1, RL_HWREV_8169S,
 		"RealTek 8169S Single-chip Gigabit Ethernet" },
-	{ RT_VENDORID, RT_DEVICEID_8169, RL_HWREV_8169SB,
+	{ RT_VENDORID, RT_DEVICEID_8169, -1, RL_HWREV_8169SB,
 		"RealTek 8169SB Single-chip Gigabit Ethernet" },
-	{ RT_VENDORID, RT_DEVICEID_8169, RL_HWREV_8110S,
+	{ RT_VENDORID, RT_DEVICEID_8169, -1, RL_HWREV_8110S,
 		"RealTek 8110S Single-chip Gigabit Ethernet" },
-	{ COREGA_VENDORID, COREGA_DEVICEID_CGLAPCIGT, RL_HWREV_8169S,
+	{ COREGA_VENDORID, COREGA_DEVICEID_CGLAPCIGT, -1, RL_HWREV_8169S,
 		"Corega CG-LAPCIGT (RTL8169S) Gigabit Ethernet" },
-	{ 0, 0, 0, NULL }
+	{ VENDORID_LINKSYS, DEVICEID_LINKSYS_EG1032, 0x10, RL_HWREV_8169S,
+		"Linksys EG1032v3 Gigabit Ethernet" },
+	{ 0, 0, 0, 0, NULL }
 };
 
 static struct rl_hwrev re_hwrevs[] = {
@@ -824,7 +826,9 @@
 
 	while (t->rl_name != NULL) {
 		if ((pci_get_vendor(dev) == t->rl_vid) &&
-		    (pci_get_device(dev) == t->rl_did)) {
+		    (pci_get_device(dev) == t->rl_did) &&
+		    ((t->rl_rid == -1) ||
+		     (pci_get_revid(dev) == t->rl_rid))) {
 
 			/*
 			 * Temporarily map the I/O space


More information about the freebsd-current mailing list