Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Aug 2010 03:57:22 -0700
From:      Jeremy Chadwick <freebsd@jdc.parodius.com>
To:        Steven Hartland <killing@multiplay.co.uk>
Cc:        FreeBSD Net <freebsd-net@freebsd.org>, FreeBSD Current <freebsd-current@freebsd.org>, FreeBSD stable <freebsd-stable@freebsd.org>, Jack Vogel <jfvogel@gmail.com>
Subject:   Re: Watchdog resets on 82575
Message-ID:  <20100810105722.GA32407@icarus.home.lan>
In-Reply-To: <E46063DA5ECD48F58E40EDEC8BAD0E72@multiplay.co.uk>
References:  <AANLkTikPPbXtfLkhZ0_P=KfMUkRxLWxnQKHg2GJNXTqZ@mail.gmail.com> <10F0535B998A4923BF9CFD85DF936473@multiplay.co.uk> <20100810100414.GA31621@icarus.home.lan> <E46063DA5ECD48F58E40EDEC8BAD0E72@multiplay.co.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Aug 10, 2010 at 11:23:26AM +0100, Steven Hartland wrote:
> Thanks Jeremy, from that we get:-
> 
> igb0@pci0:1:0:0:        class=0x020000 card=0x060015d9 chip=0x10c98086 rev=0x01 hdr=0x00
>    vendor     = 'Intel Corporation'
>    class      = network
>    subclass   = ethernet
>    cap 01[40] = powerspec 3  supports D0 D3  current D0
>    cap 05[50] = MSI supports 1 message, 64 bit, vector masks
>    cap 11[70] = MSI-X supports 10 messages in map 0x1c enabled
>    cap 10[a0] = PCI-Express 2 endpoint max data 256(512) link x4(x4)
> igb1@pci0:1:0:1:        class=0x020000 card=0x060015d9 chip=0x10c98086 rev=0x01 hdr=0x00
>    vendor     = 'Intel Corporation'
>    class      = network
>    subclass   = ethernet
>    cap 01[40] = powerspec 3  supports D0 D3  current D0
>    cap 05[50] = MSI supports 1 message, 64 bit, vector masks
>    cap 11[70] = MSI-X supports 10 messages in map 0x1c enabled
>    cap 10[a0] = PCI-Express 2 endpoint max data 256(512) link x4(x4)
> 
> I assume there is a way to convert from the hex values to the human value
> but not sure what it is?

The "card" and "chip" identifiers are part of the PCI ID specification.
You can see what the "human value" is by examining the source code for
the driver.  Sometimes it's easy to figure out, other times there's a
series of #define's which you have to reverse engineer.

In this case, there's two places with relevant information:

src/sys/dev/e1000/if_igb.c
src/sys/dev/e1000/e1000_hw.h

You have to split the Chip ID into two separate 16-bit portions, so
0x10c9 and 0x8086.

0x8086 is Intel's vendor code.  0x10c9 is the device ID of the
individual NIC/model type.  So:

$ grep -i 0x10c9 *
e1000_hw.h:#define E1000_DEV_ID_82576                    0x10C9

For Jack: igb_vendor_info_array should really be extended to include
actual ASCII strings for the individual chips/models/codenames.  I'm
sure that's on your todo list somewhere.  I'd be willing to write this
but would need a list of the models (or maybe the Linux driver has them
in comments, etc. and I could go off of that).

-- 
| Jeremy Chadwick                                   jdc@parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100810105722.GA32407>