Skip site navigation (1)Skip section navigation (2)
Date:               Tue, 29 Aug 1995 17:11:43 -0500
From:      "Andrew Webster" <awebster@dataradio.com>
To:        rogerp@xnet.com (Roger Plichta)
Cc:        freebsd-questions@freebsd.org
Subject:         Re: SMC EtherEZ
Message-ID:  <199508292112.RAA25208@vhf.dataradio.com>

next in thread | raw e-mail | index | archive | help
> Date sent:      Fri, 25 Aug 1995 18:49:56 -0500
> To:             questions@FreeBSD.ORG
> From:           rogerp@xnet.com (Roger Plichta)
> Subject:        SMC EtherEZ

> Sorry 'bout this mail, thanks for the help.
>
>         I've a SMC EtherEZ isa 10baseT card installed in my Pentium.  I
> attempted to configure the card using the SMC 8216 protocols (ed) driver,
> but when I finish the network configuration I get a message telling
> me that
> the interface can not be configured, error.  My question is: does FreeBSD
> support the EtherEZ card which supposedly emulates (???) the 8216 in
> certain instances?
>

I had originally send the following message to this mailing list on July
17th, but I didn't get any replies.  Perhaps the EtherEZ was new enough
that no one had started using it.

As you will note, this is not a solution to the problem, but it might help
you find one!
------------

Hi,

I've been trying to get FreeBSD 2.0.5-RELEASE to work using an SMC8416BT
(Ether EZ) card, but with no luck so far.

My first attempt uncovered a problem in the ed_probe routine which
incorrectly tries to determine what type of card it is (8216C or 8416C/BT).
The card is now correctly detected, but upon frame transmission, I get a
kernel panic.

I'd like to get this driver working for this card.  Any help would be
appreciated.

I've included the necessary patch to make this work properly.  On many
clone PC buses, a read on memory locations with no RAM will return the the
address, IE: A read at 0xD2000 will return 0.  This was confusing the
probe code to think that the card was an 8216.

Patch for if_ed.c for correct 8216C/8416C determination:


*** if_ed.c.old  Mon Jul 17 11:15:41 1995
--- if_ed.c Mon Jul 17 15:47:10 1995
***************
*** 279,284 ****
--- 279,285 ----
    int     i;
    u_int   memsize;
    u_char  iptr, isa16bit, sum;
+   unsigned int aw_smc_test;

    sc->asic_addr = isa_dev->id_iobase;
    sc->nic_addr = sc->asic_addr + ED_WD_NIC_OFFSET;
***************
*** 390,397 ****
        isa16bit = 1;
        break;
    case ED_TYPE_SMC8216C: /* 8216 has 16K shared mem -- 8416 has 8K */
!       (unsigned int) *(isa_dev->id_maddr+8192) = (unsigned int)0;
!       if ((unsigned int) *(isa_dev->id_maddr+8192)) {
            sc->type_str = "SMC8416C/SMC8416BT";
            sc->kdc.kdc_description =
                "Ethernet adapter: SMC 8416C or 8416BT";
--- 391,406 ----
        isa16bit = 1;
        break;
    case ED_TYPE_SMC8216C: /* 8216 has 16K shared mem -- 8416 has 8K */
!       /*
!        * A proper test is to take whatever value is at that memory
!        * location, negate it, and write it back.  Then check and
!        * see if the values read back negated corresponds to the
!        * original value.  If it does, there is definately RAM there!
!        */
!       aw_smc_test = (unsigned int) *(isa_dev->id_maddr+8192);
!       (unsigned int) *(isa_dev->id_maddr+8192) = aw_smc_test ^ 0xffff;
!       if ((unsigned int) *(isa_dev->id_maddr+8192) ^ 0xffff !=
!           aw_smc_test) {
            sc->type_str = "SMC8416C/SMC8416BT";
            sc->kdc.kdc_description =
                "Ethernet adapter: SMC 8416C or 8416BT";


-----------------------------------------------------------------------
  Andrew Webster   Network Manager / Special Projects
  Dataradio Inc.   200-5500 Royalmount Ave.      TEL: +1 514 737 0020
  Town of Mount Royal, QC, CANADA  H4P 1H7       FAX: +1 514 737 7883
  http://www.dataradio.com              Email: awebster@dataradio.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199508292112.RAA25208>