Hi,

        This is a story from the war-front of how I got
        that card to behave properly and to allow full
        ethernet sized MTUs for my VLAN channels.

        To give the salient details:

        Driver has  'static int mtu = 1500;'  line,  which
        variable isn't listed as module parameter (not that
        that obvious fix helped - somehow module parameter
        for this didn't catch at my modprobes..)

        My kludgy solution in the end was just to increase
        that statically compiled in value to   1504,  which
        however made all IP interfaces to show MTU 1504,
        which is -- bogus..

        A bit better solution (I think) is to set max received
        packet size to 1500+14+4 bytes, and not to mess with
        externally visible interface MTU size.

        Reading 3COM documentation about Wn3_MaxPktSize register
        persistance, it seems to need be re-set after every time
        the RxReset is issued.

        Further reading of 3c905C documentation seems to indicate
        that this version of the card (ASICs) will be happy to
        accept VLAN-tagged frames even without driver fixes.  Only
        3c905B (which I have) will need the change (and plain 3c905
        doesn't have MaxPktSize register at all).

        Perhaps simplest for 3c90* series cards is just define fixed
        literal telling that oversize frames are acceptable:


-       /* Set the full-duplex bit. */
-       outb(((vp->info1 & 0x8000) || vp->full_duplex ? 0x20 : 0) |
-                (dev->mtu > 1500 ? 0x40 : 0), ioaddr + Wn3_MAC_Ctrl);
+       /* Set the full-duplex bit, and allowLargePackets bit too! */
+       outb(((vp->info1 & 0x8000) || vp->full_duplex ? 0x20 : 0) |
+                0x40, ioaddr + Wn3_MAC_Ctrl);


        (and similar code at  vortex_timer(),  look for "> 1500")

        If the incoming packet is larger than can fit info buffer,
        we get an overflow error.

        An yet another alternate is to treat plain "OversizedFrame"
        indication as a non-error at packet reception:

                if ((rx_status & 0x001f4000) == 0x00104000)
                        rx_status &= ~0x0010400;

        and continue with current processing at  boomerang_rx().
        At the  vortex_rx()  this code needs to be a bit different,
        likely some code re-arrangements are called for.


/Matti Aarnio <[EMAIL PROTECTED]>
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to [EMAIL PROTECTED]

Reply via email to