summaryrefslogtreecommitdiffstats
path: root/target/linux/rb532/files-2.6.24/include/asm-mips/rc32434/dma_v.h
blob: 81cb40505de5134c9b9eecebe7c30ab3532a899d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef __IDT_DMA_V_H__
#define __IDT_DMA_V_H__

/*******************************************************************************
 *
 * Copyright 2002 Integrated Device Technology, Inc.
 *		All rights reserved.
 *
 * DMA register definition.
 *
 * File   : $Id: dma.h,v 1.3 2002/06/06 18:34:03 astichte Exp $
 *
 * Author : ryan.holmQVist@idt.com
 * Date   : 20011005
 * Update :
 *	    $Log: dma.h,v $
 *	    Revision 1.3  2002/06/06 18:34:03  astichte
 *	    Added XXX_PhysicalAddress and XXX_VirtualAddress
 *	
 *	    Revision 1.2  2002/06/05 18:30:46  astichte
 *	    Removed IDTField
 *	
 *	    Revision 1.1  2002/05/29 17:33:21  sysarch
 *	    jba File moved from vcode/include/idt/acacia
 *	
 *
 ******************************************************************************/
#include  <asm/rc32434/dma.h> 
#include  <asm/rc32434/rc32434.h>
#define DMA_CHAN_OFFSET  0x14
#define IS_DMA_USED(X) (((X) & (DMAD_f_m | DMAD_d_m | DMAD_t_m)) != 0)
#define DMA_COUNT(count)   \
  ((count) & DMAD_count_m)

#define DMA_HALT_TIMEOUT 500


static inline int rc32434_halt_dma(DMA_Chan_t ch)
{
	int timeout=1;
	if (local_readl(&ch->dmac) & DMAC_run_m) {
		local_writel(0, &ch->dmac); 
		for (timeout = DMA_HALT_TIMEOUT; timeout > 0; timeout--) {
			if (local_readl(&ch->dmas) & DMAS_h_m) {
				local_writel(0, &ch->dmas);  
				break;
			}
		}
	}

	return timeout ? 0 : 1;
}

static inline void rc32434_start_dma(DMA_Chan_t ch, u32 dma_addr)
{
	local_writel(0, &ch->dmandptr); 
	local_writel(dma_addr, &ch->dmadptr);
}

static inline void rc32434_chain_dma(DMA_Chan_t ch, u32 dma_addr)
{
	local_writel(dma_addr, &ch->dmandptr);
}

#endif	// __IDT_DMA_V_H__