5166145d8a3c5e40db7c2d9fecb600557bb42f84
[safe/jmp/linux-2.6] / 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 struct floppy_dma {
47         struct dma_struct       dma;
48         unsigned int            fiq;
49 };
50
51 struct iomd_dma {
52         struct dma_struct       dma;
53         unsigned int            state;
54         unsigned long           base;           /* Controller base address */
55         int                     irq;            /* Controller IRQ */
56         struct scatterlist      cur_sg;         /* Current controller buffer */
57 };
58
59 /*
60  * isa_dma_add - add an ISA-style DMA channel
61  */
62 extern int isa_dma_add(unsigned int, dma_t *dma);
63
64 /*
65  * Add the ISA DMA controller.  Always takes channels 0-7.
66  */
67 extern void isa_init_dma(void);