kernel-ark/include/asm-arm
Dan Williams c211092313 dmaengine: driver for the iop32x, iop33x, and iop13xx raid engines
The Intel(R) IOP series of i/o processors integrate an Xscale core with
raid acceleration engines.  The capabilities per platform are:

iop219:
 (2) copy engines
iop321:
 (2) copy engines
 (1) xor and block fill engine
iop33x:
 (2) copy and crc32c engines
 (1) xor, xor zero sum, pq, pq zero sum, and block fill engine
iop34x (iop13xx):
 (2) copy, crc32c, xor, xor zero sum, and block fill engines
 (1) copy, crc32c, xor, xor zero sum, pq, pq zero sum, and block fill engine

The driver supports the features of the async_tx api:
* asynchronous notification of operation completion
* implicit (interupt triggered) handling of inter-channel transaction
  dependencies

The driver adapts to the platform it is running by two methods.
1/ #include <asm/arch/adma.h> which defines the hardware specific
   iop_chan_* and iop_desc_* routines as a series of static inline
   functions
2/ The private platform data attached to the platform_device defines the
   capabilities of the channels

20070626: Callbacks are run in a tasklet.  Given the recent discussion on
LKML about killing tasklets in favor of workqueues I did a quick conversion
of the driver.  Raid5 resync performance dropped from 50MB/s to 30MB/s, so
the tasklet implementation remains until a generic softirq interface is
available.

Changelog:
* fixed a slot allocation bug in do_iop13xx_adma_xor that caused too few
slots to be requested eventually leading to data corruption
* enabled the slot allocation routine to attempt to free slots before
returning -ENOMEM
* switched the cleanup routine to solely use the software chain and the
status register to determine if a descriptor is complete.  This is
necessary to support other IOP engines that do not have status writeback
capability
* make the driver iop generic
* modified the allocation routines to understand allocating a group of
slots for a single operation
* added a null xor initialization operation for the xor only channel on
iop3xx
* support xor operations on buffers larger than the hardware maximum
* split the do_* routines into separate prep, src/dest set, submit stages
* added async_tx support (dependent operations initiation at cleanup time)
* simplified group handling
* added interrupt support (callbacks via tasklets)
* brought the pending depth inline with ioat (i.e. 4 descriptors)
* drop dma mapping methods, suggested by Chris Leech
* don't use inline in C files, Adrian Bunk
* remove static tasklet declarations
* make iop_adma_alloc_slots easier to read and remove chances for a
  corrupted descriptor chain
* fix locking bug in iop_adma_alloc_chan_resources, Benjamin Herrenschmidt
* convert capabilities over to dma_cap_mask_t
* fixup sparse warnings
* add descriptor flush before iop_chan_enable
* checkpatch.pl fixes
* gpl v2 only correction
* move set_src, set_dest, submit to async_tx methods
* move group_list and phys to async_tx

Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2007-07-13 08:06:18 -07:00
..
arch-aaec2000
arch-at91 [ARM] 4421/1: AT91: Value of _KEY fields. 2007-06-03 17:52:35 +01:00
arch-cl7500
arch-clps711x
arch-davinci
arch-ebsa110
arch-ebsa285
arch-ep93xx
arch-h720x
arch-imx
arch-integrator
arch-iop13xx
arch-iop32x
arch-iop33x
arch-ixp4xx [ARM] 4406/1: Trivial NSLU2 / NAS-100D header & setup code cleanup 2007-05-26 10:09:39 +01:00
arch-ixp23xx
arch-ixp2000
arch-ks8695
arch-l7200
arch-lh7a40x
arch-netx
arch-ns9xxx
arch-omap
arch-pnx4008
arch-pxa [ARM] 4422/1: Fix default value handling in gpio_direction_output (PXA) 2007-06-02 21:31:48 +01:00
arch-realview
arch-rpc
arch-s3c2410 [ARM] 4445/1: ANUBIS: Fix CPLD registers 2007-06-11 09:09:34 +01:00
arch-sa1100
arch-shark
arch-versatile
hardware dmaengine: driver for the iop32x, iop33x, and iop13xx raid engines 2007-07-13 08:06:18 -07:00
mach [ARM] use __used attribute 2007-05-30 13:15:06 +01:00
plat-s3c24xx
.gitignore
a.out.h
assembler.h
atomic.h
auxvec.h
bitops.h
bug.h
bugs.h
byteorder.h
cache.h
cacheflush.h
checksum.h
cnt32_to_63.h
cpu-multi32.h
cpu-single.h
cpu.h
cputime.h
current.h
delay.h
device.h
div64.h
dma-mapping.h
dma.h
domain.h
dyntick.h
ecard.h
elf.h
emergency-restart.h
errno.h
fcntl.h
fiq.h
flat.h
floppy.h
fpstate.h
futex.h
glue.h
gpio.h
hardirq.h
hardware.h
hw_irq.h
ide.h
io.h
ioctl.h
ioctls.h [ARM] enable arbitary speed tty ioctls and split input/output speed 2007-05-28 23:07:34 +01:00
ipc.h
ipcbuf.h
irq_regs.h
irq.h
irqflags.h
Kbuild
kdebug.h
kexec.h
kmap_types.h
leds.h
limits.h
linkage.h [ARM] VFP: fix section mismatch error 2007-06-10 12:22:20 +01:00
local.h
locks.h
mc146818rtc.h
memory.h
mman.h
mmu_context.h
mmu.h
mmzone.h
module.h
msgbuf.h
mtd-xip.h
mutex.h
namei.h
nwflash.h
page-nommu.h
page.h
param.h
parport.h
pci.h
percpu.h
pgalloc.h
pgtable-hwdef.h
pgtable-nommu.h
pgtable.h
poll.h
posix_types.h
proc-fns.h
processor.h
procinfo.h
ptrace.h [ARM] Update show_regs/oops register format 2007-06-18 15:04:42 +01:00
resource.h
rtc.h
scatterlist.h
sections.h
segment.h
semaphore-helper.h
semaphore.h
sembuf.h
serial.h
setup.h [ARM] use __used attribute 2007-05-30 13:15:06 +01:00
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
sizes.h
smp.h
socket.h
sockios.h
spinlock_types.h
spinlock.h
stat.h
statfs.h
string.h
suspend.h
system.h
termbits.h [ARM] enable arbitary speed tty ioctls and split input/output speed 2007-05-28 23:07:34 +01:00
termios.h [ARM] enable arbitary speed tty ioctls and split input/output speed 2007-05-28 23:07:34 +01:00
therm.h
thread_info.h
thread_notify.h
timex.h
tlb.h
tlbflush.h [ARM] 4394/1: ARMv7: Add the TLB range operations 2007-05-30 14:32:07 +01:00
topology.h
traps.h
types.h
uaccess.h
ucontext.h
unaligned.h
unistd.h Introduce fixed sys_sync_file_range2() syscall, implement on PowerPC and ARM 2007-06-28 11:38:30 -07:00
user.h
vfp.h
vfpmacros.h
vga.h
xor.h