home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-arm / arch-imx / imx-dma.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.9 KB  |  91 lines

  1. /*
  2.  *  linux/include/asm-arm/imxads/dma.h
  3.  *
  4.  *  Copyright (C) 1997,1998 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 as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19.  */
  20.  
  21. #include <asm/dma.h>
  22.  
  23. #ifndef __ASM_ARCH_IMX_DMA_H
  24. #define __ASM_ARCH_IMX_DMA_H
  25.  
  26. #define IMX_DMA_CHANNELS  11
  27.  
  28. /*
  29.  * struct imx_dma_channel - i.MX specific DMA extension
  30.  * @name: name specified by DMA client
  31.  * @irq_handler: client callback for end of transfer
  32.  * @err_handler: client callback for error condition
  33.  * @data: clients context data for callbacks
  34.  * @dma_mode: direction of the transfer %DMA_MODE_READ or %DMA_MODE_WRITE
  35.  * @sg: pointer to the actual read/written chunk for scatter-gather emulation
  36.  * @sgbc: counter of processed bytes in the actual read/written chunk
  37.  * @resbytes: total residual number of bytes to transfer
  38.  *            (it can be lower or same as sum of SG mapped chunk sizes)
  39.  * @sgcount: number of chunks to be read/written
  40.  *
  41.  * Structure is used for IMX DMA processing. It would be probably good
  42.  * @struct dma_struct in the future for external interfacing and use
  43.  * @struct imx_dma_channel only as extension to it.
  44.  */
  45.  
  46. struct imx_dma_channel {
  47.     const char *name;
  48.     void (*irq_handler) (int, void *, struct pt_regs *);
  49.     void (*err_handler) (int, void *, struct pt_regs *);
  50.     void *data;
  51.     dmamode_t  dma_mode;
  52.     struct scatterlist *sg;
  53.     unsigned int sgbc;
  54.     unsigned int sgcount;
  55.     unsigned int resbytes;
  56.     int dma_num;
  57. };
  58.  
  59. extern struct imx_dma_channel imx_dma_channels[IMX_DMA_CHANNELS];
  60.  
  61.  
  62. /* The type to distinguish channel numbers parameter from ordinal int type */
  63. typedef int imx_dmach_t;
  64.  
  65. int
  66. imx_dma_setup_single(imx_dmach_t dma_ch, dma_addr_t dma_address,
  67.         unsigned int dma_length, unsigned int dev_addr, dmamode_t dmamode);
  68.  
  69. int
  70. imx_dma_setup_sg(imx_dmach_t dma_ch,
  71.          struct scatterlist *sg, unsigned int sgcount, unsigned int dma_length,
  72.          unsigned int dev_addr, dmamode_t dmamode);
  73.  
  74. int
  75. imx_dma_setup_handlers(imx_dmach_t dma_ch,
  76.         void (*irq_handler) (int, void *, struct pt_regs *),
  77.         void (*err_handler) (int, void *, struct pt_regs *), void *data);
  78.  
  79. void imx_dma_enable(imx_dmach_t dma_ch);
  80.  
  81. void imx_dma_disable(imx_dmach_t dma_ch);
  82.  
  83. int imx_dma_request(imx_dmach_t dma_ch, const char *name);
  84.  
  85. void imx_dma_free(imx_dmach_t dma_ch);
  86.  
  87. int imx_dma_request_by_prio(imx_dmach_t *pdma_ch, const char *name, imx_dma_prio prio);
  88.  
  89.  
  90. #endif    /* _ASM_ARCH_IMX_DMA_H */
  91.