Return to BSD News archive
Xref: sserve comp.os.386bsd.misc:3014 comp.os.linux.misc:21034
Path: sserve!newshost.anu.edu.au!harbinger.cc.monash.edu.au!msuinfo!agate!ames!newsfeed.gsfc.nasa.gov!cesdis1.gsfc.nasa.gov!not-for-mail
From: becker@cesdis.gsfc.nasa.gov (Donald Becker)
Newsgroups: comp.os.386bsd.misc,comp.os.linux.misc
Subject: Re: source of TCP/IP (was I hope this wont ignite a major flame ...)
Date: 4 Aug 1994 02:18:11 -0400
Organization: USRA Center of Excellence in Space Data and Information Sciences
Lines: 44
Message-ID: <31q174$kpu@cesdis1.gsfc.nasa.gov>
References: <3163r7$440@quagga.ru.ac.za> <CtqrFJ.IM5@calcite.rhyolite.com> <31fd07$6pq@cesdis1.gsfc.nasa.gov> <31od8d$15l@fw.novatel.ca>
NNTP-Posting-Host: cesdis1.gsfc.nasa.gov
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
In article <31od8d$15l@fw.novatel.ca>,
Herb Peyerl <hpeyerl@sidney.novatel.ca> wrote:
>This is an example of some of the Linux device-drivers I've seen:
>
> short error = rx_status & 0x3C00;
> outw(inw(ioaddr + 0x0A) | 0x00C0, ioaddr + 0x0A);
As far as I can tell this code isn't verbatim from any driver. The closest
that I can find is the Lance driver which does
if (status & 0x40000000) { /* There was an major error, log it. */
int err_status = lp->tx_ring[entry].misc;
lp->stats.tx_errors++;
if (err_status & 0x0400) lp->stats.tx_aborted_errors++;
if (err_status & 0x0800) lp->stats.tx_carrier_errors++;
if (err_status & 0x1000) lp->stats.tx_window_errors++;
if (err_status & 0x4000) lp->stats.tx_fifo_errors++;
/* Perhaps we should re-init() after the FIFO error. */
} else {
if (status & 0x18000000)
lp->stats.collisions++;
lp->stats.tx_packets++;
}
OK, there are a lot of numeric constants there, and no comments. But in
this case the constants are *good*. I consider the code much more readable
than the alternative of writing a list of #defines in the 'constants'
section 600 lines above, just so that the constants could be used once.
We aren't looking at bit-mapped variables here. We aren't looking at
Fortran-style common blocks. This isn't a self-contained software function
where the values are aribitrary. We are looking at the fixed bits from a
hardware register.
Another point to remember is that unlike software-only functions, this code
cannot be completely understood alone. Short of duplicating the entire
databook in the comments you won't be 100% certain that you know what is
really going on.
--
Donald Becker becker@cesdis1.gsfc.nasa.gov
USRA Center of Excellence in Space Data and Information Sciences.
Code 930.5, Goddard Space Flight Center, Greenbelt, MD. 20771
301-286-0882 http://cesdis.gsfc.nasa.gov/pub/people/becker/whoiam.html