Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 May 2001 20:38:49 -0700 (PDT)
From:      wpaul@FreeBSD.ORG (Bill Paul)
To:        oscar@ac.upc.es (Oscar-Ivan Lepe-Aldama)
Cc:        freebsd-net@FreeBSD.ORG
Subject:   Re: On the workings of the xl dirver
Message-ID:  <20010510033849.AB8EF37B423@hub.freebsd.org>
In-Reply-To: <3AF950A1.2D4A13F2@ac.upc.es> from Oscar-Ivan Lepe-Aldama at "May 9, 2001 04:13:53 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
> Hi,
> I would like to have information regarding the implementation of the
> xl_start_90xB function in the xl driver. After reading the code and the
> technical reference from 3com I still cannot understand how the driver
> signals the NIC for packet downloading.

It doesn't. Instead, the xl_init() routine sets up the card to perform
TX descriptor polling:

        if (sc->xl_type == XL_TYPE_905B) {
                /* Set polling interval */
                CSR_WRITE_1(sc, XL_DOWN_POLL, 64);
                /* Load the address of the TX list */
                CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_DOWN_STALL);
                xl_wait(sc);
                CSR_WRITE_4(sc, XL_DOWNLIST_PTR,
                    vtophys(&sc->xl_ldata->xl_tx_list[0]));
                CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_DOWN_UNSTALL);
                xl_wait(sc);
        }

The NIC itself checks to see when new descriptors are added to the
download list. This saves the driver from having to issue the command
to the NIC in the start routine. The polling feature was not available
in the boomerang series chips, only in the cyclone series and later
(hurricane, tornado), hence for the older NICs we have to use the
non-polling transmit mechanism.

-Bill

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




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