1/* 2 * linux/include/asm-arm/arch-pxa/dma.h 3 * 4 * Author: Nicolas Pitre 5 * Created: Jun 15, 2001 6 * Copyright: MontaVista Software, Inc. 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11 */ 12#ifndef __ASM_ARCH_DMA_H 13#define __ASM_ARCH_DMA_H 14 15/* 16 * Descriptor structure for PXA's DMA engine 17 * Note: this structure must always be aligned to a 16-byte boundary. 18 */ 19 20typedef struct pxa_dma_desc { 21 volatile u32 ddadr; /* Points to the next descriptor + flags */ 22 volatile u32 dsadr; /* DSADR value for the current transfer */ 23 volatile u32 dtadr; /* DTADR value for the current transfer */ 24 volatile u32 dcmd; /* DCMD value for the current transfer */ 25} pxa_dma_desc; 26 27typedef enum { 28 DMA_PRIO_HIGH = 0, 29 DMA_PRIO_MEDIUM = 1, 30 DMA_PRIO_LOW = 2 31} pxa_dma_prio; 32 33#if defined(CONFIG_PXA27x) 34 35#define PXA_DMA_CHANNELS 32 36 37#define pxa_for_each_dma_prio(ch, prio) \ 38for ( \ 39 ch = prio * 4; \ 40 ch != (4 << prio) + 16; \ 41 ch = (ch + 1 == (4 << prio)) ? (prio * 4 + 16) : (ch + 1) \ 42) 43 44#elif defined(CONFIG_PXA25x) 45 46#define PXA_DMA_CHANNELS 16 47 48#define pxa_for_each_dma_prio(ch, prio) \ 49 for (ch = prio * 4; ch != (4 << prio); ch++) 50 51#endif 52 53/* 54 * DMA registration 55 */ 56 57int pxa_request_dma (char *name, 58 pxa_dma_prio prio, 59 void (*irq_handler)(int, void *), 60 void *data); 61 62void pxa_free_dma (int dma_ch); 63 64#endif /* _ASM_ARCH_DMA_H */ 65