Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Dec 2002 10:27:31 -0500 (EST)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        arch@FreeBSD.org
Subject:   busdma support in various device drivers
Message-ID:  <Pine.NEB.3.96L.1021210101643.62186A-100000@fledge.watson.org>

next in thread | raw e-mail | index | archive | help

One of the post-5.0 development goals will be to complete integration of
busdma support into FreeBSD (as well as MFC it as required).  For those
unfamiliar with busdma, it provides an architecture-independent
abstraction for handling virtual address space and DMA transfer setup, and
is required to maintain drivers across multiple platforms in a scalable
manner.  Generally speaking, drivers written to use the proper newbus and
busdma abstractions appear to work almost "out of the box" across various
architectures, whereas drivers not designed in this manner may not even
compile.  For us to properly support PAE (>4gb memory) on i386, as well as
sparc64, ppc, etc, properly, we really need push relevant device drivers
in the direction of using these abstractions.  Up until recently, we
didn't have sufficient busdma primitives to usefully convert network
interface drivers; Sam Leffler's integration of the OpenBSD crypto
acceleration framework and device drivers has provided those primitives
(they may have originated in NetBSD before hitting OpenBSD?).  In any
case, as we continue to stabilize and improve portability of the 5.x
branch, this is a necessary step.  At some point in the future, presumably
we will mandate that new drivers entering the system use the correct
abstractions, but in the mean time we have a lot to take care of. 

Attached below, please find the results of a rapid fire audit of
src/sys/dev for use of DMA and non-portable interactions with VM for the
purposes of DMA setup.  In general, the use of the folowing routines
connotes a non-portable use of VM:

	vtophys()
	kvtop()

There are a number of drivers that are already mostly converted to busmda,
but perform some direct calls to these functions for various reasons. 
They should be low-hanging fruit in a conversion effort.  I haven't had a
chance to review some of the other common locations for drivers, such as
src/sys/pci, but will attempt to get to that sometime over the next few
weeks.  Some drivers, particularly dated ISA drivers, are probably not
worth the conversion effort.  However, we have a large number of
mainstream network interface drivers, and to a lesser extent storage
drivers, that do need to be attended to.

The plan of attack I'd like to take is for driver maintainers to perform
the conversions on their own drivers, and then for maintainer-less drivers
to be addressed as staffing and needs permit.  If you're interested in
grabbing ownership of a driver for conversion, feel free to drop me an
e-mail, or just update the entry for the driver on the status web page,
which may be found at:

	http://www.FreeBSD.org/projects/busdma/

In addition, if you aware of other drivers that will require conversion,
please also let me know or update the page.  While reviewing drivers, it
may also make sense to review for 64-bit safety. 

Thanks,

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert@fledge.watson.org      Network Associates Laboratories


Platform Support Status

   +------------------------------------------------------------------------+
   |  Task   |  Responsible   |    Last     |  Status  |      Details       |
   |         |                |   updated   |          |                    |
   |---------+----------------+-------------+----------+--------------------|
   | alpha   |                |             | In       |                    |
   |         |                |             | progress |                    |
   |---------+----------------+-------------+----------+--------------------|
   | ia64    |                |             | Not done |                    |
   |---------+----------------+-------------+----------+--------------------|
   | i386    | Sam Leffler    | December 9, | Done     | Fully supported.   |
   |         |                | 2002        |          |                    |
   |---------+----------------+-------------+----------+--------------------|
   | powerpc |                |             | Not done |                    |
   |---------+----------------+-------------+----------+--------------------|
   |         |                | December 9, | In       | Mbuf busdma        |
   | sparc64 | Maxime Henrion | 2002        | progress | interfaces not yet |
   |         |                |             |          | implemented.       |
   +------------------------------------------------------------------------+

Network Interface Driver Status

   +------------------------------------------------------------------------+
   |  Task  |  Responsible   | Last updated |   Status    |      Notes      |
   |--------+----------------+--------------+-------------+-----------------|
   | if_ar  |                |              | Not done    | kvtop()         |
   |--------+----------------+--------------+-------------+-----------------|
   | if_bge |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_cs  |                |              | Not done    |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_dc  |                |              | Not done    |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_ed  |                |              | Not done    |   kvtop()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_em  |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_en  |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_fxp | Maxime Henrion | December 9,  | In progress | vtophys()       |
   |        |                | 2002         |             |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_fwe |                |              | Not done    |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_gem | Thomas Moestl  | December 9,  | In progress | Uses old busdma |
   |        |                | 2002         |             | interface.      |
   |--------+----------------+--------------+-------------+-----------------|
   | if_gx  |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_hme | Thomas Moestl  | December 9,  | In progress | Uses old busdma |
   |        |                | 2002         |             | interface.      |
   |--------+----------------+--------------+-------------+-----------------|
   | if_idt |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_ie  |                |              | Not done    | kvtop()         |
   |--------+----------------+--------------+-------------+-----------------|
   | if_lge |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_lmc |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_lnc |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_my  |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_nge |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   |        |                |              |             | mostly busdma,  |
   | if_pdq |                |              | Not done    | except for      |
   |        |                |              |             | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_rl  | Bill Paul      | December 9,  | Done        |                 |
   |        |                | 2002         |             |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_sis | Bill Paul      | December 9,  | Done        |                 |
   |        |                | 2002         |             |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_sr  |                |              | Not done    | vtophys()       |
   |--------+----------------+--------------+-------------+-----------------|
   | if_ti  |                |              | Not done    |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_tx  |                |              | Not done    |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_txp |                |              | Not done    |                 |
   |--------+----------------+--------------+-------------+-----------------|
   | if_xl  | Maxime Henrion | December 9,  | In progress |                 |
   |        |                | 2002         |             |                 |
   +------------------------------------------------------------------------+

Storage Device Driver Status

   +------------------------------------------------------------------------+
   |   Task   | Responsible |    Last     |  Status   |        Notes        |
   |          |             |   updated   |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | aac      |             | December 9, | Done      | Not 64-bit-safe     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | aha      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | adv      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | ahb      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | aic7xxx  |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | amr      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | asr      |             |             | Not done  | vtophys()           |
   |----------+-------------+-------------+-----------+---------------------|
   | ata      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | buslogic |             |             | Not done  | vtophys()           |
   |----------+-------------+-------------+-----------+---------------------|
   | ciss     |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | dpt      |             |             | Not done  | vtophys()           |
   |----------+-------------+-------------+-----------+---------------------|
   | ida      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | iir      |             |             | Not done  | vtophys()           |
   |----------+-------------+-------------+-----------+---------------------|
   | isp      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | mlx      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | mly      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | mpt      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | pst      |             |             | Not done  | vtophys()           |
   |----------+-------------+-------------+-----------+---------------------|
   |          |             | December 9, |           | At least, it looks  |
   | stg      |             | 2002        | Done      | like it may well    |
   |          |             |             |           | be.                 |
   |----------+-------------+-------------+-----------+---------------------|
   | sym      |             |             | Not done  | vtophys()           |
   |----------+-------------+-------------+-----------+---------------------|
   | trm      | Olivier     | December 9, | In        | vtophys()           |
   |          | Houchard    | 2002        | progress  |                     |
   |----------+-------------+-------------+-----------+---------------------|
   | twe      |             | December 9, | Done      |                     |
   |          |             | 2002        |           |                     |
   +------------------------------------------------------------------------+

Miscellaneous Device Driver Status

   +------------------------------------------------------------------------+
   |   Task   | Responsible | Last updated |  Status  |        Notes        |
   |----------+-------------+--------------+----------+---------------------|
   | bktr     |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | ct       |             |              | Not done |                     |
   |----------+-------------+--------------+----------+---------------------|
   | cs       |             |              | Not done |                     |
   |----------+-------------+--------------+----------+---------------------|
   | digi     |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | drm      |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | exca     | Warner Losh | December 9,  | Done     |                     |
   |          |             | 2002         |          |                     |
   |----------+-------------+--------------+----------+---------------------|
   | fb       |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | firewire |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | hea      |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | hfa      |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | hifn     | Sam Leffler | December 9,  | Done     |                     |
   |          |             | 2002         |          |                     |
   |----------+-------------+--------------+----------+---------------------|
   | musycc   |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | ubsec    | Sam Leffler | December 9,  | Done     | vtophys() is used   |
   |          |             | 2002         |          | in debugging printf |
   |----------+-------------+--------------+----------+---------------------|
   | usb      |             |              | Not done | vtophys()           |
   |----------+-------------+--------------+----------+---------------------|
   | wds      |             | December 9,  | Done     | vtophys()           |
   |          |             | 2002         |          |                     |
   +------------------------------------------------------------------------+


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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1021210101643.62186A-100000>