Broadcom 440x NIC not recognized on boot

Richard Lynch ceo at l-i-e.com
Mon Sep 13 22:20:32 PDT 2004


FreeBSD 5.2.1

I am attempting to add support for the built-in network device in my
laptop, a Dell Inspiron 700m, by altering the C source code in /usr/src/

Bear with me -- This is roughly equivalent to a plumber doing brain
surgery :-)

Windows reports this device as a Broadcom 440x, and the docs/sources for
the BFE driver say that the driver is likely to work for the 440x series,
so this is not as hopeless as one might think.

I have altered /usr/src/sys/dev/bfe/if_bfereg.h and
/usr/src/sys/dev/bfe/if_bfe.c to have lines similar to those for the 4401
device, but with 170c as the device id.

For those reading the whole thread, and noting an anomoly from what
another posted, 4324 is the *wireless* card device id, and 170c is the
wired device.  At least, that's what Windows says, and both IDs do show
up, and neither of them works.  (yet)

I have achieved what could be described as some level of success...

dmesg output now indicates the card is recognized, and sort of names the
device as 'bfe0'

Of course, I understand that's just because I may have lied to the
computer, so the 'bfe0' doesn't necessarily mean the driver is going to
work some day or anything.

So all this really boils down to is I have managed to re-build a kernel
correctly.  Hey, that's *some* level of success! :-)

But no /dev/bfe0 is created, and "ifconfig -a" shows just lo.

So it's not really working yet.

Some things that may bear fruit if I knew what to do about them...

#1
Right after 'bfe0' is detected, a CardBus Bridge says "Could not grab
register memory"

dmesg also tells me:
"cbb0 requested unsupported memory range 0x88000000 - 0xffffffff (decoding
0x0-0x0, 0x0-0x0)"

What little I understand of what I've read makes me think that this may be
indicative of a problem related to my network card...

This cardbus thingie lets the OS "talk" to my network card, right?

And it ain't getting the register memory it needs, right?

So...

Can I set aside that memory range for it, or make it get memory in a
supported memory range somehow, or ???

Does knowing the memory range set aside by Windows help?...
(FABF0000 - FABF1FFF)
Both Windows and FreeBSD agree on IRQ 10, so that's something :-)

>From reading the source code, it would seem that in the old days, I would
be attempting to do this from the BIOS, but that section of code does not
seem to be in effect, and I'm pretty sure the BIOS doesn't give my any
option anywhere near that complicated.

It's the simplest (or is that stupidest) BIOS I've ever seen, the times
I've been into it.  I'll check again, of course, but it's not looking
promising.

The source code also refers to PCI assigning the memory block, and some
day ACPI assigning the memory block.

I haven't puzzled out whether the PCI code or the ACPI code is the one
that is doing the assigning at this point.

I might be able to printf a bunch of debug messages and work that out over
the course of, say, several weeks or even months of re-making the kernel
and re-booting...  Hopefully, somebody reading this can help me shorten
that. :-)

It's also entirely possible that this cardbus bridge thingie has nothing
to do with my network card, and I'm barking up the wrong tree entirely. 
Please let me know if I'm on the wrong tack.

#2
The BFE driver seems to be relying heavily on the MII protocol in
/usr/src/sys/dev/mii, and there is an entry in ~/miidevs for the Broadcom
4401 referring to an OUI and PHYs and the magic number for the 4401 is
0x36

But looking at the URL referenced in miidevs doesn't seem to match up 0x36
with Broadcom...  I'm guessing 0x36 is Broadcom's internal OUI-related
number for this device, which is not the same as the device id in the PCI
bus (170c).

My real questions for MII are:

Am I correct in assuming I need to add a magic number to miidevs to get
the interface card to work?

How would I figure out what that magic number is?

If any reader has a 4401 and wouldn't mind doing "pciconf -lv" and/or
"dmesg -v" and search for 0x36.  If you find it, please send me the line
that contains it, so I can find my magic number in the same spot...  I
hope.

You can see a complete dmesg output (from before I altered the source) at:
http://phpbootcamp.com/articles/inspiron700m.htm
Scroll all the way to the bottom.

The dmesg output from after I altered the source doesn't differ much,
except it claims that the device is a Broadcom 4403, and tries to name it
bfe0.

I'm not sure who posted here that it was a Broadcom 4403, but this would
seem to indicate that it is a 4401-B0:
http://lkml.org/lkml/2004/8/23/202
So that 4403 probably isn't even "right" (but I'll fix that shortly)
It doesn't affect the actual working of the driver -- It's just a text
message.

On the plus side, I'm now more hopeful that the 4401 driver will work for
the 4401-B0 device, once I get all the pieces in place.

I suppose the really short version of this email is:
Should I focus on getting that CardBus Bridge to have a valid memory range
first, or should I try to figure out the MII magic number first?
Or am I gonna have to do both anyway, so I should just start digging?

Thanks in advance!  I really do appreciate all the help!

I really do hope to contribute back a patch with this device working soon :-)

-- 
Like Music?
http://l-i-e.com/artists.htm



More information about the freebsd-questions mailing list