Date: Wed, 05 Oct 2005 14:22:46 +0200 From: Fredrik Lindberg <fli+freebsd-current@shapeshifter.se> To: "M. Warner Losh" <imp@bsdimp.com> Cc: benlutz@datacomm.ch, current@freebsd.org Subject: Re: Linksys EG1032 rev. 3 patch Message-ID: <4343C596.7030000@shapeshifter.se> In-Reply-To: <20051004.094905.112627036.imp@bsdimp.com> References: <4341A55B.1070209@shapeshifter.se> <20051003.165337.14303305.imp@bsdimp.com> <43424F75.3000409@shapeshifter.se> <20051004.094905.112627036.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------020401020007030706000008 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit M. Warner Losh wrote: > In message: <43424F75.3000409@shapeshifter.se> > Fredrik Lindberg <fli@shapeshifter.se> writes: > : M. Warner Losh wrote: > : > In message: <4341A55B.1070209@shapeshifter.se> > : > Fredrik Lindberg <fli+freebsd-current@shapeshifter.se> writes: > : > : Filtering on subvendor/subdevice might be better, I didn't even think > : > : of that and revision filtering seemed to be quite popular among > : > : exsisting drivers. > : > > : > Yes. Many chip vendors bump the revision field 'often'. Just how > : > often varies from chip maker to chip maker. Some do only when they > : > have a new version of the chip that needs special work arounds (or > : > that no longer needs them :-). Others do change it for each change to > : > the silicon. Most are somewhere inbetween. > : > > : > : The subdevice id for a rev.3 card seems to be 0x0024 (subvendor 0x1737). > : > : I don't own a rev. 2 card but google says that the rev.2 card has > : > : subdevice id 0x0015 (subvendor 0x1737). > : > > : > That might be sufficient... > : > > : > : Ok, how should this be implemented then? Just a specific check in each > : drivers probe methods or by adding some svid/sdid fields to > : struct rl_type and similar structs. > : I would go for the latter, but that might be overkill. > > I'd code it as a special case in re and sk driver's probe routine for > the moment. If more of these cards surface, then doing something more > general might be a good idea. > > Warner Ok, here is something that probes for subdevice. Somebody with a rev. 2 card needs to test this and confirm that sk(4) still attaches successfully to those cards. Fredrik --------------020401020007030706000008 Content-Type: text/plain; name="linksys-20051005.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="linksys-20051005.patch" Index: dev/re/if_re.c =================================================================== RCS file: /home/ncvs/src/sys/dev/re/if_re.c,v retrieving revision 1.57 diff -u -r1.57 if_re.c --- dev/re/if_re.c 5 Oct 2005 10:09:15 -0000 1.57 +++ dev/re/if_re.c 5 Oct 2005 12:21:32 -0000 @@ -177,6 +177,8 @@ "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 @@ 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 Index: pci/if_rlreg.h =================================================================== RCS file: /home/ncvs/src/sys/pci/if_rlreg.h,v retrieving revision 1.53 diff -u -r1.53 if_rlreg.h --- pci/if_rlreg.h 29 Sep 2005 16:52:19 -0000 1.53 +++ pci/if_rlreg.h 5 Oct 2005 12:21:32 -0000 @@ -825,6 +825,21 @@ #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 */ #define PEPPERCON_VENDORID 0x1743 Index: pci/if_sk.c =================================================================== RCS file: /home/ncvs/src/sys/pci/if_sk.c,v retrieving revision 1.110 diff -u -r1.110 if_sk.c --- pci/if_sk.c 16 Sep 2005 11:11:51 -0000 1.110 +++ pci/if_sk.c 5 Oct 2005 12:21:33 -0000 @@ -1312,6 +1312,17 @@ 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); } Index: pci/if_skreg.h =================================================================== RCS file: /home/ncvs/src/sys/pci/if_skreg.h,v retrieving revision 1.29 diff -u -r1.29 if_skreg.h --- pci/if_skreg.h 10 Jun 2005 16:49:23 -0000 1.29 +++ pci/if_skreg.h 5 Oct 2005 12:21:33 -0000 @@ -104,6 +104,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 */ #define VENDORID_DLINK 0x1186 --------------020401020007030706000008--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4343C596.7030000>