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/15/2005 09:28:09
On 4/15/05 1:46 AM, "Martin Husemann" <martin@duskware.de> wrote:
...
> 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.
>
With Julian's coaching I've modified my if_hme_pci.c to look like:
--------------------------------------------------------------------------
...
#define PCI_EBUS2_BOOTROM 0x10
if (PCI_CLASS(ebus_cl) == PCI_CLASS_BRIDGE &&
PCI_PRODUCT(ebus_id) == PCI_PRODUCT_SUN_EBUS &&
pci_mapreg_map(&ebus_pa, PCI_EBUS2_BOOTROM, PCI_MAPREG_TYPE_MEM,
BUS_SPACE_MAP_CACHEABLE | BUS_SPACE_MAP_PREFETCHABLE,
&romt, &romh, 0, &romsize) == 0) {
printf("in the big if\n");
/* read PCI Expansion PROM Header */
bus_space_read_region_1(romt, romh, 0, buf, sizeof buf);
if (memcmp(buf, promhdr, sizeof promhdr) == 0 &&
(dataoff = (buf[PROMHDR_PTR_DATA] |
(buf[PROMHDR_PTR_DATA + 1] << 8))) >= 0x1c) {
printf("in the read PCI Expansion PROM Header\n");
/* read PCI Expansion PROM Data */
bus_space_read_region_1(romt, romh, dataoff,
buf, sizeof buf);
hmehexprint("buf ", buf, 32);
hmehexprint("promdat ", &promdat, sizeof promdat);
hmehexprint("bufprom2", buf+PROMDATA_DATA2, sizeof promdat2);
hmehexprint("promdat2", &promdat2, sizeof promdat2);
printf("buf[PROMDATA_PTR_VPD]: 0x%0x\n", buf[PROMDATA_PTR_VPD]);
printf("buf[PROMDATA_PTR_VPD + 1] << 8: 0x%0x\n", (buf[PROMDATA_PTR_VPD + 1]
<< 8));
printf("vpdoff: 0x%0x\n", (buf[PROMDATA_PTR_VPD] |
(buf[PROMDATA_PTR_VPD + 1] << 8)));
if (memcmp(buf, promdat, sizeof promdat) == 0 &&
memcmp(buf + PROMDATA_DATA2, promdat2,
sizeof promdat2) == 0 &&
(vpdoff = (buf[PROMDATA_PTR_VPD] |
(buf[PROMDATA_PTR_VPD + 1] << 8))) >= 0x1c)
{
printf("in the read PCI Expansion PROM Data\n");
/*
* The VPD of hme is not in PCI 2.2 standard
* format. The length in the resource
header
* is in big endian, and resources are not
* properly terminated (only one resource
* and no end tag).
*/
/* read PCI VPD */
...
--------------------------------------------------------------------------
The last 3 octets for the HME's on this card are:
00:29:32
00:29:33
00:29:34
00:29:35
If I don't comment out these lines, we don't get make it in to pull MAC:
// memcmp(buf + PROMDATA_DATA2, promdat2,
// sizeof promdat2) == 0 &&
If I do comment them out, my dmesg becomes:
Sun Microsystems PCIO Ebus2 (miscellaneous bridge, revision 0x01) at pci2
dev 0 function 0 not configured
hme0 at pci2 dev 0 function 1: Sun Happy Meal Ethernet, rev. 1
in the big if
in the read PCI Expansion PROM Header
buf : len=000032
0x50434952ffffff8e1001105000180000ffffff8000022600000001ffffff800000fffffff1
08ffffff96ffffff8a00004b08
promdat : len=000008 0x50434952ffffff8e100110
bufprom2: len=000006 0x180000ffffff800002
promdat2: len=000006 0x180000000002
buf[PROMDATA_PTR_VPD]: 0x50
buf[PROMDATA_PTR_VPD + 1] << 8: 0x0
vpdoff: 0x50
in the read PCI Expansion PROM Data
VPD parsing matched: len=000004 0x00ffffffa0ffffff8000
hme0: interrupting at irq 9
hme0: Ethernet address 00:a0:80:00:29:32
qsphy0 at hme0 phy 1: QS6612 10/100 media interface, rev. 1
qsphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
Sun Microsystems PCIO Ebus2 (miscellaneous bridge, revision 0x01) at pci2
dev 1 function 0 not configured
hme1 at pci2 dev 1 function 1: Sun Happy Meal Ethernet, rev. 1
in the big if
in the read PCI Expansion PROM Header
buf : len=000032
0x50434952ffffff8e1001105000180000ffffff8000022600000001ffffff800000fffffff1
08ffffff96ffffff8a00004b08
promdat : len=000008 0x50434952ffffff8e100110
bufprom2: len=000006 0x180000ffffff800002
promdat2: len=000006 0x180000000002
buf[PROMDATA_PTR_VPD]: 0x50
buf[PROMDATA_PTR_VPD + 1] << 8: 0x0
vpdoff: 0x50
in the read PCI Expansion PROM Data
VPD parsing matched: len=000004 0x00ffffffa0ffffff8000
hme1: interrupting at irq 5
hme1: Ethernet address 00:a0:80:00:29:32
qsphy1 at hme1 phy 1: QS6612 10/100 media interface, rev. 1
qsphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
Sun Microsystems PCIO Ebus2 (miscellaneous bridge, revision 0x01) at pci2
dev 2 function 0 not configured
hme2 at pci2 dev 2 function 1: Sun Happy Meal Ethernet, rev. 1
in the big if
in the read PCI Expansion PROM Header
buf : len=000032
0x50434952ffffff8e1001105000180000ffffff8000022600000001ffffff800000fffffff1
08ffffff96ffffff8a00004b08
promdat : len=000008 0x50434952ffffff8e100110
bufprom2: len=000006 0x180000ffffff800002
promdat2: len=000006 0x180000000002
buf[PROMDATA_PTR_VPD]: 0x50
buf[PROMDATA_PTR_VPD + 1] << 8: 0x0
vpdoff: 0x50
in the read PCI Expansion PROM Data
VPD parsing matched: len=000004 0x00ffffffa0ffffff8000
hme2: interrupting at irq 11
hme2: Ethernet address 00:a0:80:00:29:32
qsphy2 at hme2 phy 1: QS6612 10/100 media interface, rev. 1
qsphy2: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
Sun Microsystems PCIO Ebus2 (miscellaneous bridge, revision 0x01) at pci2
dev 3 function 0 not configured
hme3 at pci2 dev 3 function 1: Sun Happy Meal Ethernet, rev. 1
in the big if
in the read PCI Expansion PROM Header
buf : len=000032
0x50434952ffffff8e1001105000180000ffffff8000022600000001ffffff800000fffffff1
08ffffff96ffffff8a00004b08
promdat : len=000008 0x50434952ffffff8e100110
bufprom2: len=000006 0x180000ffffff800002
promdat2: len=000006 0x180000000002
buf[PROMDATA_PTR_VPD]: 0x50
buf[PROMDATA_PTR_VPD + 1] << 8: 0x0
vpdoff: 0x50
in the read PCI Expansion PROM Data
VPD parsing matched: len=000004 0x00ffffffa0ffffff8000
hme3: interrupting at irq 10
hme3: Ethernet address 00:a0:80:00:29:32
qsphy3 at hme3 phy 1: QS6612 10/100 media interface, rev. 1
qsphy3: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
While one MAC addr is better than no mac addr, I'll bet that something else
is missing -- unless this is all the code looks for is just one MAC addr.
With ttcp I've found the card is able to transmit (picked hme2) just fine:
67108864 bytes in 55.01 real seconds = 1191.41 KB/sec
Conversely, it CAN'T receive off the network much faster than a modem:
16777216 bytes in 882.63 real seconds = 18.56 KB/sec
I can make my sandbox system available or I can try different things if
there are suggestions.
peter