Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: (vainly?) attempting to back-port wm(4) to netbsd-5....



        hello.  Having spent a lot of time working with this driver, I have a
couple of suggestions:

1.  Just to assure yourself that the -current driver does what you want,
try booting the latest snapshot kernel from the build snapshots to see if
the NICs are recognized and usable.  If they are, then you know there's
light at the end of the tunnel.

2.  It looks like support for various 82577 chips is already in the
netbsd-5 tree, meaning you should be able to easily get your 82577 variants
working just by adding their product IDs to the driver in the latest
netbsd-5 if_wm.c sources.

3.  Once you have the 82577 chips working, then you can concentrate on
getting the 82579 chips working.

Hope that helps.

-thanks
-Brian

On Dec 22, 12:44am, "Greg A. Woods" wrote:
} Subject: (vainly?) attempting to back-port wm(4) to netbsd-5....
} --pgp-sign-Multipart_Thu_Dec_22_00:44:27_2011-1
} Content-Type: text/plain; charset=US-ASCII
} Content-Transfer-Encoding: quoted-printable
} 
} So, I've got this newish HP laptop here (an EliteBook 8460p with a dual
} Core i5 vPro CPU and Intel "6 series" mobile chipset) that has a bunch
} of hardware that doesn't get detected by NetBSD-5, most importantly all
} of the network devices (except, oddly, fwip0) are ignored.
} 
} So, after looking up all the PCI codes I found it was "simply" a matter
} of there not being a new enough version of wm(4) for the main Ethernet
} interface, for example.
} 
} Having successfully back-ported a much older version of wm(4) from
} -current at the time to netbsd-1-6, I thought "How hard could it be?"  :-)
} 
} Well the mechanics of porting the code and getting it to compile and
} link were indeed relatively easy.
} 
} On boot it detects the hardware fine and attaches as expected:
} (all output re-typed by hand of course....)
} 
} wm0: at pci0 dev 25 function 0: PCH2 LAN (82579LM) Controller, rev. 4
} wm0 PCI-Express bus
} wm0: FLASH
} wm0: Ethernet address blah
} ukphy at wm0 phy 2: Generic IEEE 802.3u media interface
} ukphy0: OUI 0x00aa00, model 0x0009, rev. 3
} ukphy0: 10baseT, ... 1000baseT-FDX, auto
} 
} 
} However I'm getting a panic when I try to access the device, e.g. by
} running dhclient, and there are some odd occurances of 0xffffffff in the
} parameter lists:
} 
} uvm_fault(0xdcf876a0, 0, 1) -> 0xe
} fatal page fault in supervisor mode
} trap type 6 code 0 eip c055bf90 cs 8 eflags 10292 cr2 10 ilevel 6
} kernel: supervisor trap page fault, code=3D0
} stopped in pid 72.1 (dhclient) at netbsd:catchpacket+0x20: movl 0x10(%eax),=
} %eax
} db{3}>trace
} catchpacket(ffffffff,c08e1bc0,dd0dda38,156,0,dd070580,c08e1bc0,156,ce472802=
} ,1)
} at netbsd:catchpacket+0x20
} bpf_mtap(....)
} wm_start(....)
} ifq_enqueue(....)
} ether_output(....)
} bpf_write(dcf98c00,dcf98c00,dd0ddc94,ce2a7f00,1,ffffffff,dcf98c00,dd0ddc54,=
} 0,18)
} at netbsd:bpf_write+0x2fd
} do_filewritev()
} sys_writev()
} syscall(dd0ddd48,b3,ab,1f,1f,88f4aae,bfbfe828,bfbfe878,bfbfe878,bbb07080)
} at netbsd:syscall+0x100
} db{3}>=20
} 
} 
} Does this look familiar to anyone, or does anyone have any other ideas
} or suggestions as to what could be wrong and I could try?
} 
} (if I can manage to clear some space on my rickety old build machine
} I'll try building a -current kernel, but at the moment I don't even have
} the -current tools built.)
} 
} 
} Now clearly I'm off in virgin territory, but unless someone happens to
} have a working, tested, pullup request already in the releng queue to
} fit i82579LM (and i82577) support into netbsd-5, I'd like to try to try
} to get this backport of the current driver working myself.
} 
} Here are the basic changes I made to the driver itself, after which I
} copied sys/dev/pci/if_wm* to my netbsd-5 source tree.  I also pulled up
} sys/dev/pci/pcidevs of course, and fixed some fallout from that.
} (I'll backport ihphy(4) as well, but I don't think it can be causing the
} panic above.)
} 
} Index: sys/dev/pci/if_wm.c
} =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
} =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
} =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
} RCS file: /cvs/master/m-NetBSD/main/src/sys/dev/pci/if_wm.c,v
} retrieving revision 1.225
} diff -u -r1.225 if_wm.c
} --- sys/dev/pci/if_wm.c       28 Nov 2011 18:21:46 -0000      1.225
} +++ sys/dev/pci/if_wm.c       21 Dec 2011 01:09:31 -0000
} @@ -130,6 +130,14 @@
}  #include <dev/pci/if_wmreg.h>
}  #include <dev/pci/if_wmvar.h>
} =20
} +#if __NetBSD_Version__ < 106010000   /* 1.6A is not right, but good enough! =
} */
} +/* XXX HACK ALERT! */
} +# define aprint_naive        printf
} +# define aprint_normal       printf
} +# define aprint_verbose printf
} +# define aprint_error        printf
} +#endif
} +
}  #ifdef WM_DEBUG
}  #define      WM_DEBUG_LINK           0x01
}  #define      WM_DEBUG_TX             0x02
} @@ -379,7 +387,12 @@
}       int sc_mchash_type;             /* multicast filter offset */
} =20
}  #if NRND > 0
} +/* this was quite a bit too early, but 599005800 is a few days too late */
} +# if __NetBSD_Version__ < 599005700
} +     rndsource_element_t rnd_source; /* random source */
} +# else
}       krndsource_t rnd_source;        /* random source */
} +# endif
}  #endif
}  };
} =20
} @@ -497,12 +510,19 @@
} =20
}  static void  wm_start(struct ifnet *);
}  static void  wm_watchdog(struct ifnet *);
} +#if __NetBSD_Version__ >=3D 599003700        /* actually part of the major 
if_eth=
} er rework? */
}  static int   wm_ifflags_cb(struct ethercom *);
} +#endif
}  static int   wm_ioctl(struct ifnet *, u_long, void *);
}  static int   wm_init(struct ifnet *);
}  static void  wm_stop(struct ifnet *, int);
} +#if __NetBSD_Version__ < 599001800
} +static bool  wm_suspend(device_t PMF_FN_PROTO);
} +static bool  wm_resume(device_t PMF_FN_PROTO);
} +#else
}  static bool  wm_suspend(device_t, const pmf_qual_t *);
}  static bool  wm_resume(device_t, const pmf_qual_t *);
} +#endif
} =20
}  static void  wm_reset(struct wm_softc *);
}  static void  wm_rxdrain(struct wm_softc *);
} @@ -610,8 +630,26 @@
}  #endif
}  static void  wm_init_manageability(struct wm_softc *);
} =20
} +
} +#ifdef CFATTACH_DECL3_NEW
}  CFATTACH_DECL3_NEW(wm, sizeof(struct wm_softc),
}      wm_match, wm_attach, wm_detach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN);
} +#else
} +# ifdef CFATTACH_DECL2_NEW
} +CFATTACH_DECL2_NEW(wm, sizeof(struct wm_softc),
} +    wm_match, wm_attach, wm_detach, NULL, NULL, NULL);
} +# else
} +#  ifdef CFATTACH_DECL                       /* #if __NetBSD_Version__ >=3D 
106080000 */
} +CFATTACH_DECL_NEW(wm, sizeof(struct wm_softc),
} +    wm_match, wm_attach, NULL, NULL);
} +#  else
} +const struct cfattach wm_pci_ca =3D {
} +     sizeof(struct wm_softc), wm_match, wm_attach
} +};
} +#  endif
} +# endif
} +#endif
} +
} =20
}  /*
}   * Devices supported by this driver.
} @@ -1958,7 +1996,9 @@
}        */
}       if_attach(ifp);
}       ether_ifattach(ifp, enaddr);
} +#if __NetBSD_Version__ >=3D 599003700        /* actually part of the major 
if_eth=
} er rework? */
}       ether_set_ifflags_cb(&sc->sc_ethercom, wm_ifflags_cb);
} +#endif
}  #if NRND > 0
}       rnd_attach_source(&sc->rnd_source, xname, RND_TYPE_NET, 0);
}  #endif
} @@ -2778,6 +2818,7 @@
}       wm_start(ifp);
}  }
} =20
} +#if __NetBSD_Version__ >=3D 599003700        /* actually part of the major 
if_eth=
} er rework? */
}  static int
}  wm_ifflags_cb(struct ethercom *ec)
}  {
} @@ -2798,6 +2839,7 @@
} =20
}       return 0;
}  }
} +#endif
} =20
}  /*
}   * wm_ioctl:         [ifnet interface function]
} @@ -3603,7 +3645,7 @@
}               if (wm_check_reset_block(sc) =3D=3D 0) {
}                       /*
}                        * Gate automatic PHY configuration by hardware on
} -                      * manaed 82579
} +                      * managed 82579
}                        */
}                       if ((sc->sc_type =3D=3D WM_T_PCH2)
}                           && ((CSR_READ(sc, WMREG_FWSM) & FWSM_FW_VALID)
} @@ -7759,7 +7801,13 @@
}  #endif /* WM_WOL */
} =20
}  static bool
} -wm_suspend(device_t self, const pmf_qual_t *qual)
} +wm_suspend(device_t self
} +#if __NetBSD_Version__ < 599001800
} +        PMF_FN_PROTO unused
} +#else
} +        , const pmf_qual_t *qual
} +#endif
} +       )
}  {
}       struct wm_softc *sc =3D device_private(self);
} =20
} @@ -7773,7 +7821,13 @@
}  }
} =20
}  static bool
} -wm_resume(device_t self, const pmf_qual_t *qual)
} +wm_resume(device_t self
} +#if __NetBSD_Version__ < 599001800
} +        PMF_FN_PROTO unused
} +#else
} +        , const pmf_qual_t *qual
} +#endif
} +       )
}  {
}       struct wm_softc *sc =3D device_private(self);
} =20
} 
} 
} --=20
}                                               Greg A. Woods
}                                               Planix, Inc.
} 
} <woods%planix.com@localhost>       +1 250 762-7675        
http://www.planix.com/
} 
} --pgp-sign-Multipart_Thu_Dec_22_00:44:27_2011-1
} Content-Type: application/pgp-signature
} Content-Transfer-Encoding: 7bit
} 
} -----BEGIN PGP SIGNATURE-----
} Version: GnuPG v1.4.9 (NetBSD)
} 
} iD8DBQBO8u3rZn1xt3i/9H8RAlFdAKDm4iWNFYtVmX3zbRyp1E6NlFuFOACfaRFg
} ccAMjlAESeF1Eb9N4f7/x3M=
} =erjk
} -----END PGP SIGNATURE-----
} 
} --pgp-sign-Multipart_Thu_Dec_22_00:44:27_2011-1--
>-- End of excerpt from "Greg A. Woods"




Home | Main Index | Thread Index | Old Index