Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
[linux-2.6] / include / asm-arm / mach / dma.h
1 /*
2  *  linux/include/asm-arm/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)(dmach_t, dma_t *);           /* optional */
19         void    (*free)(dmach_t, dma_t *);              /* optional */
20         void    (*enable)(dmach_t, dma_t *);            /* mandatory */
21         void    (*disable)(dmach_t, dma_t *);           /* mandatory */
22         int     (*residue)(dmach_t, dma_t *);           /* optional */
23         int     (*setspeed)(dmach_t, dma_t *, int);     /* optional */
24         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         dmamode_t       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         unsigned int    dma_base;       /* Controller base address      */
44         int             dma_irq;        /* Controller IRQ               */
45         struct scatterlist cur_sg;      /* Current controller buffer    */
46         unsigned int    state;
47
48         struct dma_ops  *d_ops;
49 };
50
51 /* Prototype: void arch_dma_init(dma)
52  * Purpose  : Initialise architecture specific DMA
53  * Params   : dma - pointer to array of DMA structures
54  */
55 extern void arch_dma_init(dma_t *dma);
56
57 extern void isa_init_dma(dma_t *dma);