linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / asm-arm / arch-pxa / dma.h
index edc4804..3e88a2a 100644 (file)
 #ifndef __ASM_ARCH_DMA_H
 #define __ASM_ARCH_DMA_H
 
-#define MAX_DMA_ADDRESS                0xffffffff
-
-/* No DMA as the rest of the world see it */
-#define MAX_DMA_CHANNELS       0
-
 /*
  * Descriptor structure for PXA's DMA engine
  * Note: this structure must always be aligned to a 16-byte boundary.
  */
 
-typedef struct {
+typedef struct pxa_dma_desc {
        volatile u32 ddadr;     /* Points to the next descriptor + flags */
        volatile u32 dsadr;     /* DSADR value for the current transfer */
        volatile u32 dtadr;     /* DTADR value for the current transfer */
        volatile u32 dcmd;      /* DCMD value for the current transfer */
 } pxa_dma_desc;
 
-/*
- * DMA registration
- */
+#if defined(CONFIG_PXA27x)
+
+#define PXA_DMA_CHANNELS       32
+#define PXA_DMA_NBCH(prio)     ((prio == DMA_PRIO_LOW) ? 16 : 8)
+
+typedef enum {
+       DMA_PRIO_HIGH = 0,
+       DMA_PRIO_MEDIUM = 8,
+       DMA_PRIO_LOW = 16
+} pxa_dma_prio;
+
+#elif defined(CONFIG_PXA25x)
+
+#define PXA_DMA_CHANNELS       16
+#define PXA_DMA_NBCH(prio)     ((prio == DMA_PRIO_LOW) ? 8 : 4)
 
 typedef enum {
        DMA_PRIO_HIGH = 0,
@@ -39,6 +46,12 @@ typedef enum {
        DMA_PRIO_LOW = 8
 } pxa_dma_prio;
 
+#endif
+
+/*
+ * DMA registration
+ */
+
 int pxa_request_dma (char *name,
                         pxa_dma_prio prio,
                         void (*irq_handler)(int, void *, struct pt_regs *),