78 lines
4.2 KiB
Plaintext
78 lines
4.2 KiB
Plaintext
|
.\" $NetBSD: 5.me,v 1.1 1998/07/15 00:34:54 thorpej Exp $
|
||
|
.\"
|
||
|
.\" Copyright (c) 1998 Jason R. Thorpe.
|
||
|
.\" All rights reserved.
|
||
|
.\"
|
||
|
.\" Redistribution and use in source and binary forms, with or without
|
||
|
.\" modification, are permitted provided that the following conditions
|
||
|
.\" are met:
|
||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||
|
.\" notice, this list of conditions and the following disclaimer.
|
||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||
|
.\" documentation and/or other materials provided with the distribution.
|
||
|
.\" 3. All advertising materials mentioning features or use of this software
|
||
|
.\" must display the following acknowledgements:
|
||
|
.\" This product includes software developed for the NetBSD Project
|
||
|
.\" by Jason R. Thorpe.
|
||
|
.\" 4. The name of the author may not be used to endorse or promote products
|
||
|
.\" derived from this software without specific prior written permission.
|
||
|
.\"
|
||
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||
|
.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
|
.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||
|
.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||
|
.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
|
.\" SUCH DAMAGE.
|
||
|
.\"
|
||
|
.sh 1 "Conclusions"
|
||
|
.pp
|
||
|
The \fIbus_dma\fR interface was introduced into the NetBSD kernel
|
||
|
at development version 1.2G, just before the release cycle for NetBSD 1.3
|
||
|
began. When the code was committed to the NetBSD master sources, several
|
||
|
drivers, mostly for SCSI controllers, were converted to the interface at
|
||
|
the same time. (All of these drivers had been previously converted to
|
||
|
use the \fIbus_space\fR interface.) Not only did these drivers provide
|
||
|
an example of the correct use of \fIbus_dma\fR, but they provided
|
||
|
functionality that had
|
||
|
not previously existed in the NetBSD kernel: support for bus mastering ISA
|
||
|
devices in PCs with more than 16MB of RAM.
|
||
|
.pp
|
||
|
The first real test of the interface on the Alpha platform came by
|
||
|
installing a bus mastering ISA device (an Adaptec 1542 SCSI controller)
|
||
|
in an AXPpci33 computer. After addressing a small bug in the Alpha
|
||
|
implementation of \fIbus_dmamap_load\fR(), the device worked flawlessly.
|
||
|
.pp
|
||
|
When converting device drivers to use the new interface, developers
|
||
|
discovered that a fair amount of mostly-similar code could be removed
|
||
|
from each driver converted. The code in question was the loop that
|
||
|
built the software scatter-gather list. In some cases, the drivers
|
||
|
performed noticeably better, due to the fact that the implementation
|
||
|
of this loop within \fIbus_dmamap_load()\fR is more efficient and
|
||
|
supports segment concatenation.
|
||
|
.pp
|
||
|
Most of the machine-independent drivers that use DMA have been converted
|
||
|
to the new interface, and more platforms have implemented the
|
||
|
necessary back-ends. The results have been very encouraging. Nearly
|
||
|
every device/platform combination that has been tested has worked without
|
||
|
additional modifications to the device driver. The few exceptions to this
|
||
|
have generally been to handle differences in host and device byte-order,
|
||
|
and are not directly related to DMA.
|
||
|
.pp
|
||
|
The \fIbus_dma\fR interface has also paved the way for additional
|
||
|
machine-independent bus autoconfiguration frameworks, such as for VME.
|
||
|
Eventually, this will help support PCI-to-VME bridges, and allow
|
||
|
Sun, Motorola, and Intel systems to share common VME device drivers.
|
||
|
.pp
|
||
|
We have found the \fIbus_dma\fR interface to be a major architectural
|
||
|
benefit in the NetBSD kernel, greatly simplifying the process of porting
|
||
|
the kernel to new platforms, and making portable device driver development
|
||
|
considerably easier. In short, the abstraction has delivered what it was
|
||
|
designed to deliver: a means of supporting a wide range of platforms with
|
||
|
maximum code reuse.
|