Subject: Re: Sun Quad Ethernet card on PC
To: Martin Husemann <martin@duskware.de>
From: Peter Eisch <peter@boku.net>
List: port-i386
Date: 04/19/2005 23:55:56
[added port-sparc[64] as they may know more about this stuff, I'm trolling
for the correct audience]

On 4/15/05 1:46 AM, "Martin Husemann" <martin@duskware.de> wrote:

> On Wed, Apr 13, 2005 at 10:48:01AM -0500, Peter Eisch wrote:
>> hme3: no Ethernet address found
> 
> First please verify that you do not have HME_USE_LOCAL_MAC_ADDRESS in your
> kernel config file, it should default to 1 on everything that is not a sparc.
> 
> Second, please look at the #if HME_USE_LOCAL_MAC_ADDRESS code in
> sys/dev/pci/if_hme_pci.c that digs out VPD from the hme - maybe the qfe
> needs this code slightly different? Maybe you can add printfs there to
> see where it fails for your card.
> 

I've discovered a few things.  My qfe card isn't sun-branded.  I thought it
was, as it came in one, but is actually an SBE, Inc. card.  (formerly
Antares?)

http://www.sbei.net/Products/LAN/lanPCI-4FC.htm

This is cool in that the qfe drivers support it on solaris, so the vendor
portion of the mac addr is legit.  After discovering this, I've upped the
buffer size when reading the vpd info at src/src/dev/pci/if_hme_pci.c:263 I
get a buffer reading:

buf      00000000: 9000094E410600A0 800029329000094E
buf      00000010: 410600A080002933 9000094E410600A0
buf      00000020: 800029349000094E 410600A080002935
buf      00000030: 7900C2B609636F70 7972696768740801

If you walk into this, you start at the 4th byte, you get the NA for network
address, 0x06 for the 6 bytes of the following MAC: 00:A0:80:00:29:32.  Then
we get to index into the next interface's MAC and so forth.

Presumably there's a way that each interface on the card can get the right
MAC addr based on it's index from the PCI info.  Well, that's what I've
think others are doing.

If someone who knows this info better than I could glance at it for a minute
or two, I'd appreciate it.

Lastly, I have to comment out lines 250 and 251 in order to get the
conditional to be true.  The data that gets compared there is:

bufprom2 00000000: 180000800002
promdat2 00000000: 180000000002

Where bufprom2 is what is read and promdat2 is what is being expected.
Perhaps this is an indicator that it's a multiple NIC product?

peter