Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 26519
b: refs/heads/master
c: 9953255
h: refs/heads/master
i:
  26517: d35b8d1
  26515: fa124b3
  26511: 17c8a79
v: v3
  • Loading branch information
Nicolas Pitre authored and Russell King committed May 5, 2006
1 parent ff33e08 commit 0ba7d1f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b7d7ef87e15dea105be59ec8f14e2f92182dd421
refs/heads/master: 99532559dc7a8e686b2cef14c780a7ad5dbd4a31
17 changes: 5 additions & 12 deletions trunk/arch/arm/mach-pxa/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,23 +45,16 @@ int pxa_request_dma (char *name, pxa_dma_prio prio,

local_irq_save(flags);

/* try grabbing a DMA channel with the requested priority */
for (i = prio; i < prio + PXA_DMA_NBCH(prio); i++) {
if (!dma_channels[i].name) {
found = 1;
break;
}
}

if (!found) {
/* requested prio group is full, try hier priorities */
for (i = prio-1; i >= 0; i--) {
do {
/* try grabbing a DMA channel with the requested priority */
pxa_for_each_dma_prio (i, prio) {
if (!dma_channels[i].name) {
found = 1;
break;
}
}
}
/* if requested prio group is full, try a hier priority */
} while (!found && prio--);

if (found) {
DCSR(i) = DCSR_STARTINTR|DCSR_ENDINTR|DCSR_BUSERR;
Expand Down
26 changes: 14 additions & 12 deletions trunk/include/asm-arm/arch-pxa/dma.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,27 +24,29 @@ typedef struct pxa_dma_desc {
volatile u32 dcmd; /* DCMD value for the current transfer */
} pxa_dma_desc;

typedef enum {
DMA_PRIO_HIGH = 0,
DMA_PRIO_MEDIUM = 1,
DMA_PRIO_LOW = 2
} pxa_dma_prio;

#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;
#define pxa_for_each_dma_prio(ch, prio) \
for ( \
ch = prio * 4; \
ch != (4 << prio) + 16; \
ch = (ch + 1 == (4 << prio)) ? (prio * 4 + 16) : (ch + 1) \
)

#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,
DMA_PRIO_MEDIUM = 4,
DMA_PRIO_LOW = 8
} pxa_dma_prio;
#define pxa_for_each_dma_prio(ch, prio) \
for (ch = prio * 4; ch != (4 << prio); ch++)

#endif

Expand Down

0 comments on commit 0ba7d1f

Please sign in to comment.