home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / mach-imx / include / mach / imx-dma.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.0 KB  |  95 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 *);
  49.     void (*err_handler) (int, void *, int errcode);
  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. #define IMX_DMA_ERR_BURST     1
  62. #define IMX_DMA_ERR_REQUEST   2
  63. #define IMX_DMA_ERR_TRANSFER  4
  64. #define IMX_DMA_ERR_BUFFER    8
  65.  
  66. /* The type to distinguish channel numbers parameter from ordinal int type */
  67. typedef int imx_dmach_t;
  68.  
  69. int
  70. imx_dma_setup_single(imx_dmach_t dma_ch, dma_addr_t dma_address,
  71.         unsigned int dma_length, unsigned int dev_addr, dmamode_t dmamode);
  72.  
  73. int
  74. imx_dma_setup_sg(imx_dmach_t dma_ch,
  75.          struct scatterlist *sg, unsigned int sgcount, unsigned int dma_length,
  76.          unsigned int dev_addr, dmamode_t dmamode);
  77.  
  78. int
  79. imx_dma_setup_handlers(imx_dmach_t dma_ch,
  80.         void (*irq_handler) (int, void *),
  81.         void (*err_handler) (int, void *, int), void *data);
  82.  
  83. void imx_dma_enable(imx_dmach_t dma_ch);
  84.  
  85. void imx_dma_disable(imx_dmach_t dma_ch);
  86.  
  87. int imx_dma_request(imx_dmach_t dma_ch, const char *name);
  88.  
  89. void imx_dma_free(imx_dmach_t dma_ch);
  90.  
  91. imx_dmach_t imx_dma_request_by_prio(const char *name, imx_dma_prio prio);
  92.  
  93.  
  94. #endif    /* _ASM_ARCH_IMX_DMA_H */
  95.