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

Re: using AUI port of 3c529 (MCA) network card



Quoting Matthew Munsey (mmunsey@MIT.EDU):
> I've been unsuccessful in getting my 3Com 3c529 MCA Ethernet card to
> communicate with the network using the AUI port, although the 10baseT
> (twisted pair) connection with the card works fine.  The 3c529 is the MCA
> (IBM's proprietary microchannel architecture for the PS/2 and other
> machines) version of the 3c509 (same chipset), so I use the 3c509.o module
> that came with my Debian installation (Linux 2.0.36).  The 3c509.c file in
> the 2.0.36 source tree actually has MCA detection code for the 3c529,
> although I'm not sure that it's complete.
> 
> To debug the problem, I've tried compiling the module myself from the
> 2.0.36 source tree, sometimes with certain modifications and also without
> any changes.  However, I have the problem that the newly compiled 3c509.o
> will not work at all with my network card, even though the one that came
> with Debian (supposedly 2.0.36) does work.  Is it possible that the 3c509.c
> source that was used in this version of Debian is different than the one in
> the 2.0.36 source tree I've been using to compile my own?  Does anyone know
> what version of 3c509.c is in this Debian distribution?

I would doubt that it's a different version, but there are IFDEFs
in there which could change what's actually compiled. (Thus I
notice that my own 2.0.36 is 600bytes smaller than the installation
version, presumably because CONFIG_MCA is not set by me.)

> When I insmod the correct 3c509.o module without any arguments (insmod
> 3c509), I get the following (note that the card identification on the first
> line comes directly from the MCA card and thus has nothing to with the
> module's detection mechanism):

You're sure of that? My interpretation of the source is that only
two unsigned chars are read from the card (apart from the id, of
course).

> # insmod 3c509
> 3c509: found 3Com 3c529 EtherLink III (10baseT) at slot 3
> eth0: 3c509 at 0x200 tag 0, 10baseT port, address  00 20 af 99 a8 1e, IRQ 5.
> 3c509.c:1.16 2/3/98 becker@cesdis.gsfc.nasa.gov
> 
> After this, I manually run /etc/init.d/network, and the card then works
> fine off the 10baseT port.
> 
> [Note: The version of 3c509.c in the 2.0.36 source tree is also identified
> as v1.16 2/3/98, so it seems like it should be the same.]
> 
> However, when I run the version that I compiled myself from the 2.0.36
> source tree, I get the following:
> # insmod 3c509
> /lib/modules/2.0.36/net/3c509.o: init_module: Device or resource busy

As I understand it, that message is a catch-all. It might be worth
comparing your .config file with the installation one if you're
compiling the whole kernel. If you're not, are you sure you are
setting all the necessary switches? For example, I would expect my
own 3c509.o to produce that message on your system.

> If I subsequently replace the 3c509.o file with the correct module (the one
> that came with the Debian distribution), it then works as shown above.

That would suggest something is missing in your version. I take it this
is still the unmodified source. All bets are off if you modify the
source (unless you're just mispelling the odd text string to trace 
what's coming from where - e.g. to test your theory about where 
"3Com 3c529 EtherLink III (10baseT) at slot 3" is coming from).

> However, I want to enable the AUI port on the network card, so I use the
> xcvr option to set the transceiver port to 1 (AUI), but I get the same
> response from the module (which still claims that I am using the 10baseT
> port, as seen in the second line of output, where it should instead say AUI
> port):
> # insmod 3c509 xcvr=1
> 3c509: found 3Com 3c529 EtherLink III (10baseT) at slot 3
> eth0: 3c509 at 0x200 tag 0, 10baseT port, address  00 20 af 99 a8 1e, IRQ 5.
> 3c509.c:1.16 2/3/98 becker@cesdis.gsfc.nasa.gov

I can't see how this would work. I can see where irq=N gets overwritten at
if (dev) {                    /* Set passed-in IRQ or I/O Addr. */
but there's no mention of if_port that I can see. My interpretation
is that the if_port emerges from the id in:

struct el3_mca_adapters_struct el3_mca_adapters[] = {
        { "3Com 3c529 EtherLink III (10base2)", 0x627c },
        { "3Com 3c529 EtherLink III (10baseT)", 0x627d },
        { "3Com 3c529 EtherLink III (test mode)", 0x62db },
        { "3Com 3c529 EtherLink III (TP or coax)", 0x62f6 },
        { "3Com 3c529 EtherLink III (TP)", 0x62f7 },
        { NULL, 0 },
};

That would imply that the card has to tell the kernel which transceiver
it is going to use through the id.

> Thanks for any advice or information on this setup and my difficulties.

The best advice is probably still to set the card up with its own
(dos) utility for a fixed transceiver.

Cheers,

-- 
Email:  d.wright@open.ac.uk   Tel: +44 1908 653 739  Fax: +44 1908 655 151
Snail:  David Wright, Earth Science Dept., Milton Keynes, England, MK7 6AA
Disclaimer:   These addresses are only for reaching me, and do not signify
official stationery. Views expressed here are either my own or plagiarised.


Reply to: