Linux Audio

Check our new training course

Buildroot integration, development and maintenance

Need a Buildroot system for your embedded project?
Loading...
  1/* dma.h: FRV DMA controller management
  2 *
  3 * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
  4 * Written by David Howells (dhowells@redhat.com)
  5 *
  6 * This program is free software; you can redistribute it and/or
  7 * modify it under the terms of the GNU General Public License
  8 * as published by the Free Software Foundation; either version
  9 * 2 of the License, or (at your option) any later version.
 10 */
 11
 12#ifndef _ASM_DMA_H
 13#define _ASM_DMA_H
 14
 15//#define DMA_DEBUG 1
 16
 17#include <linux/interrupt.h>
 18
 19#undef MAX_DMA_CHANNELS		/* don't use kernel/dma.c */
 20
 21/* under 2.4 this is actually needed by the new bootmem allocator */
 22#define MAX_DMA_ADDRESS		PAGE_OFFSET
 23
 24/*
 25 * FRV DMA controller management
 26 */
 27typedef irqreturn_t (*dma_irq_handler_t)(int dmachan, unsigned long cstr, void *data);
 28
 29extern void frv_dma_init(void);
 30
 31extern int frv_dma_open(const char *devname,
 32			unsigned long dmamask,
 33			int dmacap,
 34			dma_irq_handler_t handler,
 35			unsigned long irq_flags,
 36			void *data);
 37
 38/* channels required */
 39#define FRV_DMA_MASK_ANY	ULONG_MAX	/* any channel */
 40
 41/* capabilities required */
 42#define FRV_DMA_CAP_DREQ	0x01		/* DMA request pin */
 43#define FRV_DMA_CAP_DACK	0x02		/* DMA ACK pin */
 44#define FRV_DMA_CAP_DONE	0x04		/* DMA done pin */
 45
 46extern void frv_dma_close(int dma);
 47
 48extern void frv_dma_config(int dma, unsigned long ccfr, unsigned long cctr, unsigned long apr);
 49
 50extern void frv_dma_start(int dma,
 51			  unsigned long sba, unsigned long dba,
 52			  unsigned long pix, unsigned long six, unsigned long bcl);
 53
 54extern void frv_dma_restart_circular(int dma, unsigned long six);
 55
 56extern void frv_dma_stop(int dma);
 57
 58extern int is_frv_dma_interrupting(int dma);
 59
 60extern void frv_dma_dump(int dma);
 61
 62extern void frv_dma_status_clear(int dma);
 63
 64#define FRV_DMA_NCHANS	8
 65#define FRV_DMA_4CHANS	4
 66#define FRV_DMA_8CHANS	8
 67
 68#define DMAC_CCFRx		0x00	/* channel configuration reg */
 69#define DMAC_CCFRx_CM_SHIFT	16
 70#define DMAC_CCFRx_CM_DA	0x00000000
 71#define DMAC_CCFRx_CM_SCA	0x00010000
 72#define DMAC_CCFRx_CM_DCA	0x00020000
 73#define DMAC_CCFRx_CM_2D	0x00030000
 74#define DMAC_CCFRx_ATS_SHIFT	8
 75#define DMAC_CCFRx_RS_INTERN	0x00000000
 76#define DMAC_CCFRx_RS_EXTERN	0x00000001
 77#define DMAC_CCFRx_RS_SHIFT	0
 78
 79#define DMAC_CSTRx		0x08	/* channel status reg */
 80#define DMAC_CSTRx_FS		0x0000003f
 81#define DMAC_CSTRx_NE		0x00000100
 82#define DMAC_CSTRx_FED		0x00000200
 83#define DMAC_CSTRx_WER		0x00000800
 84#define DMAC_CSTRx_RER		0x00001000
 85#define DMAC_CSTRx_CE		0x00002000
 86#define DMAC_CSTRx_INT		0x00800000
 87#define DMAC_CSTRx_BUSY		0x80000000
 88
 89#define DMAC_CCTRx		0x10	/* channel control reg */
 90#define DMAC_CCTRx_DSIZ_1	0x00000000
 91#define DMAC_CCTRx_DSIZ_2	0x00000001
 92#define DMAC_CCTRx_DSIZ_4	0x00000002
 93#define DMAC_CCTRx_DSIZ_32	0x00000005
 94#define DMAC_CCTRx_DAU_HOLD	0x00000000
 95#define DMAC_CCTRx_DAU_INC	0x00000010
 96#define DMAC_CCTRx_DAU_DEC	0x00000020
 97#define DMAC_CCTRx_SSIZ_1	0x00000000
 98#define DMAC_CCTRx_SSIZ_2	0x00000100
 99#define DMAC_CCTRx_SSIZ_4	0x00000200
100#define DMAC_CCTRx_SSIZ_32	0x00000500
101#define DMAC_CCTRx_SAU_HOLD	0x00000000
102#define DMAC_CCTRx_SAU_INC	0x00001000
103#define DMAC_CCTRx_SAU_DEC	0x00002000
104#define DMAC_CCTRx_FC		0x08000000
105#define DMAC_CCTRx_ICE		0x10000000
106#define DMAC_CCTRx_IE		0x40000000
107#define DMAC_CCTRx_ACT		0x80000000
108
109#define DMAC_SBAx		0x18	/* source base address reg */
110#define DMAC_DBAx		0x20	/* data base address reg */
111#define DMAC_PIXx		0x28	/* primary index reg */
112#define DMAC_SIXx		0x30	/* secondary index reg */
113#define DMAC_BCLx		0x38	/* byte count limit reg */
114#define DMAC_APRx		0x40	/* alternate pointer reg */
115
116/*
117 * required for PCI + MODULES
118 */
119#ifdef CONFIG_PCI
120extern int isa_dma_bridge_buggy;
121#else
122#define isa_dma_bridge_buggy 	(0)
123#endif
124
125#endif /* _ASM_DMA_H */