Path: blob/master/arch/arm/mach-pnx4008/include/mach/dma.h
10820 views
/*1* arch/arm/mach-pnx4008/include/mach/dma.h2*3* PNX4008 DMA header file4*5* Author: Vitaly Wool6* Copyright: MontaVista Software Inc. (c) 20057*8* This program is free software; you can redistribute it and/or modify9* it under the terms of the GNU General Public License version 2 as10* published by the Free Software Foundation.11*/1213#ifndef __ASM_ARCH_DMA_H14#define __ASM_ARCH_DMA_H1516#include "platform.h"1718#define MAX_DMA_CHANNELS 81920#define DMAC_BASE IO_ADDRESS(PNX4008_DMA_CONFIG_BASE)21#define DMAC_INT_STAT (DMAC_BASE + 0x0000)22#define DMAC_INT_TC_STAT (DMAC_BASE + 0x0004)23#define DMAC_INT_TC_CLEAR (DMAC_BASE + 0x0008)24#define DMAC_INT_ERR_STAT (DMAC_BASE + 0x000c)25#define DMAC_INT_ERR_CLEAR (DMAC_BASE + 0x0010)26#define DMAC_SOFT_SREQ (DMAC_BASE + 0x0024)27#define DMAC_CONFIG (DMAC_BASE + 0x0030)28#define DMAC_Cx_SRC_ADDR(c) (DMAC_BASE + 0x0100 + (c) * 0x20)29#define DMAC_Cx_DEST_ADDR(c) (DMAC_BASE + 0x0104 + (c) * 0x20)30#define DMAC_Cx_LLI(c) (DMAC_BASE + 0x0108 + (c) * 0x20)31#define DMAC_Cx_CONTROL(c) (DMAC_BASE + 0x010c + (c) * 0x20)32#define DMAC_Cx_CONFIG(c) (DMAC_BASE + 0x0110 + (c) * 0x20)3334enum {35WIDTH_BYTE = 0,36WIDTH_HWORD,37WIDTH_WORD38};3940enum {41FC_MEM2MEM_DMA,42FC_MEM2PER_DMA,43FC_PER2MEM_DMA,44FC_PER2PER_DMA,45FC_PER2PER_DPER,46FC_MEM2PER_PER,47FC_PER2MEM_PER,48FC_PER2PER_SPER49};5051enum {52DMA_INT_UNKNOWN = 0,53DMA_ERR_INT = 1,54DMA_TC_INT = 2,55};5657enum {58DMA_BUFFER_ALLOCATED = 1,59DMA_HAS_LL = 2,60};6162enum {63PER_CAM_DMA_1 = 0,64PER_NDF_FLASH = 1,65PER_MBX_SLAVE_FIFO = 2,66PER_SPI2_REC_XMIT = 3,67PER_MS_SD_RX_XMIT = 4,68PER_HS_UART_1_XMIT = 5,69PER_HS_UART_1_RX = 6,70PER_HS_UART_2_XMIT = 7,71PER_HS_UART_2_RX = 8,72PER_HS_UART_7_XMIT = 9,73PER_HS_UART_7_RX = 10,74PER_SPI1_REC_XMIT = 11,75PER_MLC_NDF_SREC = 12,76PER_CAM_DMA_2 = 13,77PER_PRNG_INFIFO = 14,78PER_PRNG_OUTFIFO = 15,79};8081struct pnx4008_dma_ch_ctrl {82int tc_mask;83int cacheable;84int bufferable;85int priv_mode;86int di;87int si;88int dest_ahb1;89int src_ahb1;90int dwidth;91int swidth;92int dbsize;93int sbsize;94int tr_size;95};9697struct pnx4008_dma_ch_config {98int halt;99int active;100int lock;101int itc;102int ie;103int flow_cntrl;104int dest_per;105int src_per;106};107108struct pnx4008_dma_ll {109unsigned long src_addr;110unsigned long dest_addr;111u32 next_dma;112unsigned long ch_ctrl;113struct pnx4008_dma_ll *next;114int flags;115void *alloc_data;116int (*free) (void *);117};118119struct pnx4008_dma_config {120int is_ll;121unsigned long src_addr;122unsigned long dest_addr;123unsigned long ch_ctrl;124unsigned long ch_cfg;125struct pnx4008_dma_ll *ll;126u32 ll_dma;127int flags;128void *alloc_data;129int (*free) (void *);130};131132extern struct pnx4008_dma_ll *pnx4008_alloc_ll_entry(dma_addr_t *);133extern void pnx4008_free_ll_entry(struct pnx4008_dma_ll *, dma_addr_t);134extern void pnx4008_free_ll(u32 ll_dma, struct pnx4008_dma_ll *);135136extern int pnx4008_request_channel(char *, int,137void (*)(int, int, void *),138void *);139extern void pnx4008_free_channel(int);140extern int pnx4008_config_dma(int, int, int);141extern int pnx4008_dma_pack_control(const struct pnx4008_dma_ch_ctrl *,142unsigned long *);143extern int pnx4008_dma_parse_control(unsigned long,144struct pnx4008_dma_ch_ctrl *);145extern int pnx4008_dma_pack_config(const struct pnx4008_dma_ch_config *,146unsigned long *);147extern int pnx4008_dma_parse_config(unsigned long,148struct pnx4008_dma_ch_config *);149extern int pnx4008_config_channel(int, struct pnx4008_dma_config *);150extern int pnx4008_channel_get_config(int, struct pnx4008_dma_config *);151extern int pnx4008_dma_ch_enable(int);152extern int pnx4008_dma_ch_disable(int);153extern int pnx4008_dma_ch_enabled(int);154extern void pnx4008_dma_split_head_entry(struct pnx4008_dma_config *,155struct pnx4008_dma_ch_ctrl *);156extern void pnx4008_dma_split_ll_entry(struct pnx4008_dma_ll *,157struct pnx4008_dma_ch_ctrl *);158159#endif /* _ASM_ARCH_DMA_H */160161162