⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dma.h

📁 linux 内核源代码
💻 H
字号:
/* * File:         include/asm-blackfin/simple_bf533_dma.h * Based on:     none - original work * Author:       LG Soft India *               Copyright (C) 2004-2005 Analog Devices Inc. * Created:      Tue Sep 21 2004 * Description:  This file contains the major Data structures and constants * 		 used for DMA Implementation in BF533 * Modified: * * Bugs:         Enter bugs at http://blackfin.uclinux.org/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. * If not, write to the Free Software Foundation, * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifndef _BLACKFIN_DMA_H_#define _BLACKFIN_DMA_H_#include <asm/io.h>#include <linux/slab.h>#include <asm/irq.h>#include <asm/signal.h>#include <asm/semaphore.h>#include <linux/kernel.h>#include <asm/mach/dma.h>#include <linux/mm.h>#include <linux/interrupt.h>#include <asm/blackfin.h>#define MAX_DMA_ADDRESS PAGE_OFFSET/******************************************************************************        Generic DMA  Declarations*****************************************************************************/enum dma_chan_status {	DMA_CHANNEL_FREE,	DMA_CHANNEL_REQUESTED,	DMA_CHANNEL_ENABLED,};/*------------------------- * config reg bits value *-------------------------*/#define DATA_SIZE_8 		0#define DATA_SIZE_16 		1#define DATA_SIZE_32 		2#define DMA_FLOW_STOP 		0#define DMA_FLOW_AUTO 		1#define DMA_FLOW_ARRAY 		4#define DMA_FLOW_SMALL 		6#define DMA_FLOW_LARGE 		7#define DIMENSION_LINEAR    0#define DIMENSION_2D           1#define DIR_READ     0#define DIR_WRITE    1#define INTR_DISABLE   0#define INTR_ON_BUF    2#define INTR_ON_ROW    3struct dmasg {	unsigned long next_desc_addr;	unsigned long start_addr;	unsigned short cfg;	unsigned short x_count;	short x_modify;	unsigned short y_count;	short y_modify;} __attribute__((packed));struct dma_register {	unsigned long next_desc_ptr;	/* DMA Next Descriptor Pointer register */	unsigned long start_addr;	/* DMA Start address  register */	unsigned short cfg;	/* DMA Configuration register */	unsigned short dummy1;	/* DMA Configuration register */	unsigned long reserved;	unsigned short x_count;	/* DMA x_count register */	unsigned short dummy2;	short x_modify;	/* DMA x_modify register */	unsigned short dummy3;	unsigned short y_count;	/* DMA y_count register */	unsigned short dummy4;	short y_modify;	/* DMA y_modify register */	unsigned short dummy5;	unsigned long curr_desc_ptr;	/* DMA Current Descriptor Pointer					   register */	unsigned long curr_addr_ptr;	/* DMA Current Address Pointer						   register */	unsigned short irq_status;	/* DMA irq status register */	unsigned short dummy6;	unsigned short peripheral_map;	/* DMA peripheral map register */	unsigned short dummy7;	unsigned short curr_x_count;	/* DMA Current x-count register */	unsigned short dummy8;	unsigned long reserved2;	unsigned short curr_y_count;	/* DMA Current y-count register */	unsigned short dummy9;	unsigned long reserved3;};typedef irqreturn_t(*dma_interrupt_t) (int irq, void *dev_id);struct dma_channel {	struct mutex dmalock;	char *device_id;	enum dma_chan_status chan_status;	struct dma_register *regs;	struct dmasg *sg;		/* large mode descriptor */	unsigned int ctrl_num;	/* controller number */	dma_interrupt_t irq_callback;	void *data;	unsigned int dma_enable_flag;	unsigned int loopback_flag;};/********************************************************************************	DMA API's*******************************************************************************//* functions to set register mode */void set_dma_start_addr(unsigned int channel, unsigned long addr);void set_dma_next_desc_addr(unsigned int channel, unsigned long addr);void set_dma_curr_desc_addr(unsigned int channel, unsigned long addr);void set_dma_x_count(unsigned int channel, unsigned short x_count);void set_dma_x_modify(unsigned int channel, short x_modify);void set_dma_y_count(unsigned int channel, unsigned short y_count);void set_dma_y_modify(unsigned int channel, short y_modify);void set_dma_config(unsigned int channel, unsigned short config);unsigned short set_bfin_dma_config(char direction, char flow_mode,				   char intr_mode, char dma_mode, char width);void set_dma_curr_addr(unsigned int channel, unsigned long addr);/* get curr status for polling */unsigned short get_dma_curr_irqstat(unsigned int channel);unsigned short get_dma_curr_xcount(unsigned int channel);unsigned short get_dma_curr_ycount(unsigned int channel);unsigned long get_dma_next_desc_ptr(unsigned int channel);unsigned long get_dma_curr_desc_ptr(unsigned int channel);unsigned long get_dma_curr_addr(unsigned int channel);/* set large DMA mode descriptor */void set_dma_sg(unsigned int channel, struct dmasg *sg, int nr_sg);/* check if current channel is in use */int dma_channel_active(unsigned int channel);/* common functions must be called in any mode */void free_dma(unsigned int channel);int dma_channel_active(unsigned int channel); /* check if a channel is in use */void disable_dma(unsigned int channel);void enable_dma(unsigned int channel);int request_dma(unsigned int channel, char *device_id);int set_dma_callback(unsigned int channel, dma_interrupt_t callback,		     void *data);void dma_disable_irq(unsigned int channel);void dma_enable_irq(unsigned int channel);void clear_dma_irqstat(unsigned int channel);void *dma_memcpy(void *dest, const void *src, size_t count);void *safe_dma_memcpy(void *dest, const void *src, size_t count);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -