/* * arch/arm/kernel/dma.h * * Copyright (C) 1998 Russell King * * This header file describes the interface between the generic DMA handler * (dma.c) and the architecture-specific DMA backends (dma-*.c) */ typedef struct { dmasg_t buf; /* single DMA */ int sgcount; /* number of DMA SG */ dmasg_t *sg; /* DMA Scatter-Gather List */ unsigned int active:1; /* Transfer active */ unsigned int invalid:1; /* Address/Count changed */ dmamode_t dma_mode; /* DMA mode */ int speed; /* DMA speed */ unsigned int lock; /* Device is allocated */ const char *device_id; /* Device name */ unsigned int dma_base; /* Controller base address */ int dma_irq; /* Controller IRQ */ int state; /* Controller state */ dmasg_t cur_sg; /* Current controller buffer */ } dma_t; /* Prototype: int arch_request_dma(channel, dma, dev_id) * Purpose : Perform architecture specific claiming of a DMA channel * Params : channel - DMA channel number * : dma - DMA structure (above) for channel * : dev_id - device ID string passed with request * Returns : 0 on success, E????? number on error */ int arch_request_dma(dmach_t channel, dma_t *dma, const char *dev_id); /* Prototype: int arch_free_dma(channel, dma) * Purpose : Perform architecture specific freeing of a DMA channel * Params : channel - DMA channel number * : dma - DMA structure for channel */ void arch_free_dma(dmach_t channel, dma_t *dma); /* Prototype: void arch_enable_dma(channel, dma) * Purpose : Enable a claimed DMA channel * Params : channel - DMA channel number * : dma - DMA structure for channel */ void arch_enable_dma(dmach_t channel, dma_t *dma); /* Prototype: void arch_disable_dma(channel, dma) * Purpose : Disable a claimed DMA channel * Params : channel - DMA channel number * : dma - DMA structure for channel */ void arch_disable_dma(dmach_t channel, dma_t *dma); /* Prototype: int arch_get_dma_residue(channel, dma) * Purpose : Return number of bytes left to DMA * Params : channel - DMA channel number * : dma - DMA structure for channel * Returns : Number of bytes left to DMA */ int arch_get_dma_residue(dmach_t channel, dma_t *dma); /* Prototype: int arch_set_dma_speed(channel, dma, cycle) * Purpose : Convert a cycle time to a register setting * Params : channel - DMA channel number * : dma - DMA structure for channel * : cycle - cycle time in NS * Returns : setting for 'dma->speed' */ int arch_set_dma_speed(dmach_t channel, dma_t *dma, int cycle); /* Prototype: void arch_dma_init(dma) * Purpose : Initialise architecture specific DMA * Params : dma - pointer to array of DMA structures */ void arch_dma_init(dma_t *dma);