Subject: Preliminary work on ath(4)
To: None <>
From: Bruce J.A. Nourish <>
List: current-users
Date: 08/19/2003 20:27:41
Hey everyone,

I've done some initial work on porting FreeBSD's ath(4). Note that I
say "initial": I've never done any kernel programming before, everything
I did I learned tonight. The code is probably not of a very high quality.
I'm throwing it out here because (a) I'm exhausted and (b) I've hit a
a wall.

These are the major things I've done so far:

* Ripped out all the FreeBSD mutex and taskqueue junk from ath_softc,
  and fixed header breakage in if_athvar.h. 
* Rewritten most of if_ath_pci.c, replacing FreeBSD code with NetBSD
  equivalent, fixing header breakage, and commenting out some 
  non-essential stuff. This file now compiles.
* In if_ath.c, I have kludged around the use of FreeBSD's 2-arguament 
  KASSERT, fixed header breakage, and a few other things.
* Added it to the config/Makefile system under sys/arch/i386/ath.
* Added some needed stuff to sys/net/if_ieee80211.h.

The problem I've run into is in the difference between FreeBSD and 
NetBSD's bus_dma interfaces: these are non-trivial. For instance,
bus_dma_load_mbuf uses a callback on Free - it doesn't on Net. Also,
on Free, the creation of DMA tags and DMA maps are two separate 
functions: on Net, they are wedded together. The code in if_ath.c
is designed for the FreeBSD interface, and altering it is made more
difficult by my lack of knowlege of the underlying algorithm (scatter/
gather I/O).

Anyway, the code is here:

Unpack ath.tar.gz in arch/i386, apply the patches, and add a line to
your kernel conf:

ath at pci ? dev ? function ?

I hope somebody with more experience will be able to finish the job, or
give me an idea on how to go about translating those bus_dma calls.

Bruce J.A. Nourish <>