Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Oct 2000 10:18:16 -0400
From:      Pat Wendorf <beholder@unios.dhs.org>
To:        Satoshi Asami <asami@FreeBSD.ORG>
Cc:        mobile@FreeBSD.ORG
Subject:   Re: Linksys EtherFast 10/100 in 4-stable?
Message-ID:  <39F6EBA8.18E0727B@unios.dhs.org>
References:  <200010250612.e9P6CrX97864@silvia.hip.berkeley.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
I also have this card and yhis is the same thing that happened to me
when I switched from a 10mbps Hub to a 100mbps hub for my network.  It
seemed to work with everthing but NFS.  Considering the card, even in
100 mode, can't seem to do more than 1M/s I just stuck it back on the
10mbps hub, and regained the ability to use NFS.  

- Pat

Satoshi Asami wrote:
> 
> Hi,
> 
> I upgraded my ThinkPad 560 to 4.1 today and the network is not working
> well.  NFS seems to hang as soon as I try to transfer a big file.  It
> happens 4.1 as well as the latest (as of two days ago) 4-stable.
> Normal network stuff seems fine, at least I can transfer stuff like
> the kernel with ftp.
> 
> I'm not sure if it's related but I'm using a Linksys EtherFast 10/100.
> It used to work fine with the following patch to 3-stable.  Looking at
> sys/dev/ed, it seems some of the stuff were merged but not all of it.
> 
> I tried to apply the patch by hand but not being a kernel buff at all,
> I can't get anything to work. ;)
> 
> Does anyone have any idea what I should do?
> 
> Satoshi
> -------
> Index: sys/i386/isa/if_ed.c
> ===================================================================
> RCS file: /usr/cvs/src/sys/i386/isa/Attic/if_ed.c,v
> retrieving revision 1.148.2.5
> diff -u -r1.148.2.5 if_ed.c
> --- sys/i386/isa/if_ed.c        2000/01/18 14:19:39     1.148.2.5
> +++ sys/i386/isa/if_ed.c        2000/01/19 11:48:24
> @@ -1072,6 +1072,7 @@
>         u_char  romdata[16], tmp;
>         static char test_pattern[32] = "THIS is A memory TEST pattern";
>         char    test_buffer[32];
> +       int     linksys = 0;
> 
>         sc->asic_addr = port + ED_NOVELL_ASIC_OFFSET;
>         sc->nic_addr = port + ED_NOVELL_NIC_OFFSET;
> @@ -1141,7 +1142,13 @@
>         ed_pio_writemem(sc, test_pattern, 8192, sizeof(test_pattern));
>         ed_pio_readmem(sc, 8192, test_buffer, sizeof(test_pattern));
> 
> -       if (bcmp(test_pattern, test_buffer, sizeof(test_pattern))) {
> +       linksys = ed_get_Linksys(sc);
> +       if (linksys) {
> +               outb(sc->nic_addr + ED_P0_DCR, ED_DCR_WTS | ED_DCR_FT1 | ED_DCR_LS);
> +               sc->isa16bit = 1;
> +               sc->type = ED_TYPE_NE2000;
> +               sc->type_str = "Linksys";
> +       } else if (bcmp(test_pattern, test_buffer, sizeof(test_pattern))) {
>                 /* not an NE1000 - try NE2000 */
> 
>                 outb(sc->nic_addr + ED_P0_DCR, ED_DCR_WTS | ED_DCR_FT1 | ED_DCR_LS);
> @@ -1251,19 +1258,22 @@
>          * Use one xmit buffer if < 16k, two buffers otherwise (if not told
>          * otherwise).
>          */
> -       if ((memsize < 16384) || (flags & ED_FLAGS_NO_MULTI_BUFFERING))
> +       if ((sc->mem_size < 16384) || (flags & ED_FLAGS_NO_MULTI_BUFFERING))
>                 sc->txb_cnt = 1;
>         else
>                 sc->txb_cnt = 2;
> 
>         sc->rec_page_start = sc->tx_page_start + sc->txb_cnt * ED_TXBUF_SIZE;
> -       sc->rec_page_stop = sc->tx_page_start + memsize / ED_PAGE_SIZE;
> +       n = sc->tx_page_start + sc->mem_size / ED_PAGE_SIZE;
> +       sc->rec_page_stop = (n > 0xff) ? 0xff : n;
> 
>         sc->mem_ring = sc->mem_start + sc->txb_cnt * ED_PAGE_SIZE * ED_TXBUF_SIZE;
> 
> -       ed_pio_readmem(sc, 0, romdata, 16);
> -       for (n = 0; n < ETHER_ADDR_LEN; n++)
> -               sc->arpcom.ac_enaddr[n] = romdata[n * (sc->isa16bit + 1)];
> +       if (!linksys) {
> +               ed_pio_readmem(sc, 0, romdata, 16);
> +               for (n = 0; n < ETHER_ADDR_LEN; n++)
> +                       sc->arpcom.ac_enaddr[n] = romdata[n * (sc->isa16bit + 1)];
> +       }
> 
>  #ifdef GWETHER
>         if (sc->arpcom.ac_enaddr[2] == 0x86) {
> @@ -2195,6 +2205,24 @@
>          * Loop back to the top to possibly buffer more packets
>          */
>         goto outloop;
> +}
> +
> +static int
> +ed_get_Linksys(sc)
> +       struct ed_softc *sc;
> +{
> +       u_char sum;
> +       int i;
> +
> +       for (sum = 0, i = 0x14; i < 0x1c; i++)
> +               sum += inb(sc->nic_addr + i);
> +       if (sum != 0xff)
> +               return (0);
> +       for (i = 0; i < ETHER_ADDR_LEN; i++) {
> +               sc->arpcom.ac_enaddr[i] = inb(sc->nic_addr + 0x14 + i);
> +               printf("%02x.", sc->arpcom.ac_enaddr[i]);
> +       }
> +       return (1);
>  }
> 
>  /*
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-mobile" in the body of the message

-- 

Pat Wendorf


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?39F6EBA8.18E0727B>