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

📄 ppc4xx_dma.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#define SET_DMA_PRIORITY(x)   (((x)&0x00800001))	/* DMA Channel Priority */#define DMA_PRIORITY_MASK	0x00800001#define   PRIORITY_LOW         	0x00000000#define   PRIORITY_MID_LOW     	0x00000001#define   PRIORITY_MID_HIGH    	0x00800000#define   PRIORITY_HIGH        	0x00800001#define GET_DMA_PRIORITY(x) (((((x)&DMA_PRIORITY_MASK) &0x00800000) >> 22 ) | (((x)&DMA_PRIORITY_MASK) &0x00000001))#define DMA_CS0           (1<<31)	/* Terminal Count has been reached */#define DMA_CS1           (1<<30)#define DMA_CS2           (1<<29)#define DMA_CS3           (1<<28)#define DMA_TS0           (1<<27)	/* End of Transfer has been requested */#define DMA_TS1           (1<<26)#define DMA_TS2           (1<<25)#define DMA_TS3           (1<<24)#define DMA_CH0_ERR       (1<<23)	/* DMA Chanel 0 Error */#define DMA_CH1_ERR       (1<<22)#define DMA_CH2_ERR       (1<<21)#define DMA_CH3_ERR       (1<<20)#define DMA_CT0		  (1<<19)	/* Chained transfere */#define DMA_IN_DMA_REQ0   (1<<18)	/* Internal DMA Request is pending */#define DMA_IN_DMA_REQ1   (1<<17)#define DMA_IN_DMA_REQ2   (1<<16)#define DMA_IN_DMA_REQ3   (1<<15)#define DMA_EXT_DMA_REQ0  (1<<14)	/* External DMA Request is pending */#define DMA_EXT_DMA_REQ1  (1<<13)#define DMA_EXT_DMA_REQ2  (1<<12)#define DMA_EXT_DMA_REQ3  (1<<11)#define DMA_CH0_BUSY      (1<<10)	/* DMA Channel 0 Busy */#define DMA_CH1_BUSY      (1<<9)#define DMA_CH2_BUSY       (1<<8)#define DMA_CH3_BUSY       (1<<7)#define DMA_CT1            (1<<6)	/* Chained transfere */#define DMA_CT2            (1<<5)#define DMA_CT3            (1<<4)#define DMA_CH_ENABLE (1<<7)#define SET_DMA_CH(x) (((x)&0x1)<<7)#define GET_DMA_CH(x) (((x)&DMA_CH_ENABLE)>>7)/* STBx25xxx dma unique *//* enable device port on a dma channel * example ext 0 on dma 1 */#define	SSP0_RECV	15#define	SSP0_XMIT	14#define EXT_DMA_0	12#define	SC1_XMIT	11#define SC1_RECV	10#define EXT_DMA_2	9#define	EXT_DMA_3	8#define SERIAL2_XMIT	7#define SERIAL2_RECV	6#define SC0_XMIT 	5#define	SC0_RECV	4#define	SERIAL1_XMIT	3#define SERIAL1_RECV	2#define	SERIAL0_XMIT	1#define SERIAL0_RECV	0#define DMA_CHAN_0	1#define DMA_CHAN_1	2#define DMA_CHAN_2	3#define DMA_CHAN_3	4/* end STBx25xx *//* * Bit 30 must be one for Redwoods, otherwise transfers may receive errors. */#define DMA_CR_MB0 0x2#define SET_DMA_CONTROL \       		(SET_DMA_CIE_ENABLE(p_init->int_enable) |  /* interrupt enable         */ \		SET_DMA_ETD(p_init->etd_output)        |  /* end of transfer pin      */ \		SET_DMA_TCE(p_init->tce_enable)        |  /* terminal count enable    */ \		SET_DMA_PL(p_init->pl)                 |  /* peripheral location      */ \		SET_DMA_DAI(p_init->dai)               |  /* dest addr increment      */ \		SET_DMA_SAI(p_init->sai)               |  /* src addr increment       */ \		SET_DMA_PRIORITY(p_init->cp)           |  /* channel priority        */  \		SET_DMA_PW(p_init->pwidth)             |  /* peripheral/bus width    */ \		SET_DMA_PSC(p_init->psc)               |  /* peripheral setup cycles */ \		SET_DMA_PWC(p_init->pwc)               |  /* peripheral wait cycles  */ \		SET_DMA_PHC(p_init->phc)               |  /* peripheral hold cycles  */ \		SET_DMA_TCD(p_init->tcd_disable)	  |  /* TC chain mode disable   */ \		SET_DMA_ECE(p_init->ece_enable)	  |  /* ECE chanin mode enable  */ \		SET_DMA_CH(p_init->ch_enable)	|    /* Chain enable 	        */ \		DMA_CR_MB0				/* must be one */)#define GET_DMA_POLARITY(chan) chan#endiftypedef struct {	unsigned short in_use;	/* set when channel is being used, clr when				 * available.				 */	/*	 * Valid polarity settings:	 *   DMAReq_ActiveLow(n)	 *   DMAAck_ActiveLow(n)	 *   EOT_ActiveLow(n)	 *	 *   n is 0 to max dma chans	 */	unsigned int polarity;	char buffer_enable;	/* Boolean: buffer enable            */	char tce_enable;	/* Boolean: terminal count enable    */	char etd_output;	/* Boolean: eot pin is a tc output   */	char pce;		/* Boolean: parity check enable      */	/*	 * Peripheral location:	 * INTERNAL_PERIPHERAL (UART0 on the 405GP)	 * EXTERNAL_PERIPHERAL	 */	char pl;		/* internal/external peripheral      */	/*	 * Valid pwidth settings:	 *   PW_8	 *   PW_16	 *   PW_32	 *   PW_64	 */	unsigned int pwidth;	char dai;		/* Boolean: dst address increment   */	char sai;		/* Boolean: src address increment   */	/*	 * Valid psc settings: 0-3	 */	unsigned int psc;	/* Peripheral Setup Cycles         */	/*	 * Valid pwc settings:	 * 0-63	 */	unsigned int pwc;	/* Peripheral Wait Cycles          */	/*	 * Valid phc settings:	 * 0-7	 */	unsigned int phc;	/* Peripheral Hold Cycles          */	/*	 * Valid cp (channel priority) settings:	 *   PRIORITY_LOW	 *   PRIORITY_MID_LOW	 *   PRIORITY_MID_HIGH	 *   PRIORITY_HIGH	 */	unsigned int cp;	/* channel priority                */	/*	 * Valid pf (memory read prefetch) settings:	 *	 *   PREFETCH_1	 *   PREFETCH_2	 *   PREFETCH_4	 */	unsigned int pf;	/* memory read prefetch            */	/*	 * Boolean: channel interrupt enable	 * NOTE: for sgl transfers, only the last descriptor will be setup to	 * interrupt.	 */	char int_enable;	char shift;		/* easy access to byte_count shift, based on */	/* the width of the channel                  */	uint32_t control;	/* channel control word                      */	/* These variabled are used ONLY in single dma transfers              */	unsigned int mode;	/* transfer mode                     */	phys_addr_t addr;	char ce;		/* channel enable */#ifdef CONFIG_STB03xxx	char ch_enable;	char tcd_disable;	char ece_enable;	char td;		/* transfer direction */#endif	char int_on_final_sg;/* for scatter/gather - only interrupt on last sg */} ppc_dma_ch_t;/* * PPC44x DMA implementations have a slightly different * descriptor layout.  Probably moved about due to the * change to 64-bit addresses and link pointer. I don't * know why they didn't just leave control_count after * the dst_addr. */#ifdef PPC4xx_DMA_64BITtypedef struct {	uint32_t control;	uint32_t control_count;	phys_addr_t src_addr;	phys_addr_t dst_addr;	phys_addr_t next;} ppc_sgl_t;#elsetypedef struct {	uint32_t control;	phys_addr_t src_addr;	phys_addr_t dst_addr;	uint32_t control_count;	uint32_t next;} ppc_sgl_t;#endiftypedef struct {	unsigned int dmanr;	uint32_t control;	/* channel ctrl word; loaded from each descrptr */	uint32_t sgl_control;	/* LK, TCI, ETI, and ERI bits in sgl descriptor */	dma_addr_t dma_addr;	/* dma (physical) address of this list          */	ppc_sgl_t *phead;	dma_addr_t phead_dma;	ppc_sgl_t *ptail;	dma_addr_t ptail_dma;} sgl_list_info_t;typedef struct {	phys_addr_t *src_addr;	phys_addr_t *dst_addr;	phys_addr_t dma_src_addr;	phys_addr_t dma_dst_addr;} pci_alloc_desc_t;extern ppc_dma_ch_t dma_channels[];/* * The DMA API are in ppc4xx_dma.c and ppc4xx_sgdma.c */extern int ppc4xx_init_dma_channel(unsigned int, ppc_dma_ch_t *);extern int ppc4xx_get_channel_config(unsigned int, ppc_dma_ch_t *);extern int ppc4xx_set_channel_priority(unsigned int, unsigned int);extern unsigned int ppc4xx_get_peripheral_width(unsigned int);extern void ppc4xx_set_sg_addr(int, phys_addr_t);extern int ppc4xx_add_dma_sgl(sgl_handle_t, phys_addr_t, phys_addr_t, unsigned int);extern void ppc4xx_enable_dma_sgl(sgl_handle_t);extern void ppc4xx_disable_dma_sgl(sgl_handle_t);extern int ppc4xx_get_dma_sgl_residue(sgl_handle_t, phys_addr_t *, phys_addr_t *);extern int ppc4xx_delete_dma_sgl_element(sgl_handle_t, phys_addr_t *, phys_addr_t *);extern int ppc4xx_alloc_dma_handle(sgl_handle_t *, unsigned int, unsigned int);extern void ppc4xx_free_dma_handle(sgl_handle_t);extern int ppc4xx_get_dma_status(void);extern int ppc4xx_enable_burst(unsigned int);extern int ppc4xx_disable_burst(unsigned int);extern int ppc4xx_set_burst_size(unsigned int, unsigned int);extern void ppc4xx_set_src_addr(int dmanr, phys_addr_t src_addr);extern void ppc4xx_set_dst_addr(int dmanr, phys_addr_t dst_addr);extern void ppc4xx_enable_dma(unsigned int dmanr);extern void ppc4xx_disable_dma(unsigned int dmanr);extern void ppc4xx_set_dma_count(unsigned int dmanr, unsigned int count);extern int ppc4xx_get_dma_residue(unsigned int dmanr);extern void ppc4xx_set_dma_addr2(unsigned int dmanr, phys_addr_t src_dma_addr,				 phys_addr_t dst_dma_addr);extern int ppc4xx_enable_dma_interrupt(unsigned int dmanr);extern int ppc4xx_disable_dma_interrupt(unsigned int dmanr);extern int ppc4xx_clr_dma_status(unsigned int dmanr);extern int ppc4xx_map_dma_port(unsigned int dmanr, unsigned int ocp_dma,short dma_chan);extern int ppc4xx_disable_dma_port(unsigned int dmanr, unsigned int ocp_dma,short dma_chan);extern int ppc4xx_set_dma_mode(unsigned int dmanr, unsigned int mode);/* These are in kernel/dma.c: *//* reserve a DMA channel */extern int request_dma(unsigned int dmanr, const char *device_id);/* release it again */extern void free_dma(unsigned int dmanr);#endif#endif				/* __KERNEL__ */

⌨️ 快捷键说明

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