📄 dma.h
字号:
/* * linux/include/asm-arm/arch-pnx4008/dma.h * * PNX4008 DMA header file * * Author: Vitaly Wool * Copyright: MontaVista Software Inc. (c) 2005 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */#ifndef __ASM_ARCH_DMA_H#define __ASM_ARCH_DMA_H#include "platform.h"#define MAX_DMA_ADDRESS 0xffffffff#define MAX_DMA_CHANNELS 8#define DMAC_BASE IO_ADDRESS(PNX4008_DMA_CONFIG_BASE)#define DMAC_INT_STAT (DMAC_BASE + 0x0000)#define DMAC_INT_TC_STAT (DMAC_BASE + 0x0004)#define DMAC_INT_TC_CLEAR (DMAC_BASE + 0x0008)#define DMAC_INT_ERR_STAT (DMAC_BASE + 0x000c)#define DMAC_INT_ERR_CLEAR (DMAC_BASE + 0x0010)#define DMAC_SOFT_SREQ (DMAC_BASE + 0x0024)#define DMAC_CONFIG (DMAC_BASE + 0x0030)#define DMAC_Cx_SRC_ADDR(c) (DMAC_BASE + 0x0100 + (c) * 0x20)#define DMAC_Cx_DEST_ADDR(c) (DMAC_BASE + 0x0104 + (c) * 0x20)#define DMAC_Cx_LLI(c) (DMAC_BASE + 0x0108 + (c) * 0x20)#define DMAC_Cx_CONTROL(c) (DMAC_BASE + 0x010c + (c) * 0x20)#define DMAC_Cx_CONFIG(c) (DMAC_BASE + 0x0110 + (c) * 0x20)enum { WIDTH_BYTE = 0, WIDTH_HWORD, WIDTH_WORD};enum { FC_MEM2MEM_DMA, FC_MEM2PER_DMA, FC_PER2MEM_DMA, FC_PER2PER_DMA, FC_PER2PER_DPER, FC_MEM2PER_PER, FC_PER2MEM_PER, FC_PER2PER_SPER};enum { DMA_INT_UNKNOWN = 0, DMA_ERR_INT = 1, DMA_TC_INT = 2,};enum { DMA_BUFFER_ALLOCATED = 1, DMA_HAS_LL = 2,};enum { PER_CAM_DMA_1 = 0, PER_NDF_FLASH = 1, PER_MBX_SLAVE_FIFO = 2, PER_SPI2_REC_XMIT = 3, PER_MS_SD_RX_XMIT = 4, PER_HS_UART_1_XMIT = 5, PER_HS_UART_1_RX = 6, PER_HS_UART_2_XMIT = 7, PER_HS_UART_2_RX = 8, PER_HS_UART_7_XMIT = 9, PER_HS_UART_7_RX = 10, PER_SPI1_REC_XMIT = 11, PER_MLC_NDF_SREC = 12, PER_CAM_DMA_2 = 13, PER_PRNG_INFIFO = 14, PER_PRNG_OUTFIFO = 15,};struct pnx4008_dma_ch_ctrl { int tc_mask; int cacheable; int bufferable; int priv_mode; int di; int si; int dest_ahb1; int src_ahb1; int dwidth; int swidth; int dbsize; int sbsize; int tr_size;};struct pnx4008_dma_ch_config { int halt; int active; int lock; int itc; int ie; int flow_cntrl; int dest_per; int src_per;};struct pnx4008_dma_ll { unsigned long src_addr; unsigned long dest_addr; u32 next_dma; unsigned long ch_ctrl; struct pnx4008_dma_ll *next; int flags; void *alloc_data; int (*free) (void *);};struct pnx4008_dma_config { int is_ll; unsigned long src_addr; unsigned long dest_addr; unsigned long ch_ctrl; unsigned long ch_cfg; struct pnx4008_dma_ll *ll; u32 ll_dma; int flags; void *alloc_data; int (*free) (void *);};extern struct pnx4008_dma_ll *pnx4008_alloc_ll_entry(dma_addr_t *);extern void pnx4008_free_ll_entry(struct pnx4008_dma_ll *, dma_addr_t);extern void pnx4008_free_ll(u32 ll_dma, struct pnx4008_dma_ll *);extern int pnx4008_request_channel(char *, int, void (*)(int, int, void *), void *);extern void pnx4008_free_channel(int);extern int pnx4008_config_dma(int, int, int);extern int pnx4008_dma_pack_control(const struct pnx4008_dma_ch_ctrl *, unsigned long *);extern int pnx4008_dma_parse_control(unsigned long, struct pnx4008_dma_ch_ctrl *);extern int pnx4008_dma_pack_config(const struct pnx4008_dma_ch_config *, unsigned long *);extern int pnx4008_dma_parse_config(unsigned long, struct pnx4008_dma_ch_config *);extern int pnx4008_config_channel(int, struct pnx4008_dma_config *);extern int pnx4008_channel_get_config(int, struct pnx4008_dma_config *);extern int pnx4008_dma_ch_enable(int);extern int pnx4008_dma_ch_disable(int);extern int pnx4008_dma_ch_enabled(int);extern void pnx4008_dma_split_head_entry(struct pnx4008_dma_config *, struct pnx4008_dma_ch_ctrl *);extern void pnx4008_dma_split_ll_entry(struct pnx4008_dma_ll *, struct pnx4008_dma_ch_ctrl *);#endif /* _ASM_ARCH_DMA_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -