Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[pandora-kernel.git] / arch / arm / include / asm / mach / dma.h
1 /*
2  *  arch/arm/include/asm/mach/dma.h
3  *
4  *  Copyright (C) 1998-2000 Russell King
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  *  This header file describes the interface between the generic DMA handler
11  *  (dma.c) and the architecture-specific DMA backends (dma-*.c)
12  */
13
14 struct dma_struct;
15 typedef struct dma_struct dma_t;
16
17 struct dma_ops {
18         int     (*request)(unsigned int, dma_t *);              /* optional */
19         void    (*free)(unsigned int, dma_t *);                 /* optional */
20         void    (*enable)(unsigned int, dma_t *);               /* mandatory */
21         void    (*disable)(unsigned int, dma_t *);              /* mandatory */
22         int     (*residue)(unsigned int, dma_t *);              /* optional */
23         int     (*setspeed)(unsigned int, dma_t *, int);        /* optional */
24         const char *type;
25 };
26
27 struct dma_struct {
28         void            *addr;          /* single DMA address           */
29         unsigned long   count;          /* single DMA size              */
30         struct scatterlist buf;         /* single DMA                   */
31         int             sgcount;        /* number of DMA SG             */
32         struct scatterlist *sg;         /* DMA Scatter-Gather List      */
33
34         unsigned int    active:1;       /* Transfer active              */
35         unsigned int    invalid:1;      /* Address/Count changed        */
36
37         unsigned int    dma_mode;       /* DMA mode                     */
38         int             speed;          /* DMA speed                    */
39
40         unsigned int    lock;           /* Device is allocated          */
41         const char      *device_id;     /* Device name                  */
42
43         const struct dma_ops *d_ops;
44 };
45
46 /*
47  * isa_dma_add - add an ISA-style DMA channel
48  */
49 extern int isa_dma_add(unsigned int, dma_t *dma);
50
51 /*
52  * Add the ISA DMA controller.  Always takes channels 0-7.
53  */
54 extern void isa_init_dma(void);