| #ifndef DMA_EXPORT_H | |
| #define DMA_EXPORT_H | |
| /**************************************************** | |
| * $Id: | |
| * | |
| * Copyright Motorola 1999 | |
| * | |
| * $Log: | |
| * | |
| ****************************************************/ | |
| /* These are the defined return values for the DMA_* functions. | |
| * Any non-zero value indicates failure. Failure modes can be added for | |
| * more detailed error reporting. | |
| */ | |
| typedef enum _dma_status | |
| { | |
| DMA_SUCCESS = 0, | |
| DMA_ERROR, | |
| } DMA_Status; | |
| /* These are the defined channel transfer types. */ | |
| typedef enum _dma_transfer_types | |
| { | |
| DMA_M2M = 0, /* local memory to local memory */ | |
| DMA_M2P = 1, /* local memory to PCI */ | |
| DMA_P2M = 2, /* PCI to local memory */ | |
| DMA_P2P = 3, /* PCI to PCI */ | |
| } DMA_TRANSFER_TYPE; | |
| typedef enum _dma_interrupt_steer | |
| { | |
| DMA_INT_STEER_LOCAL = 0, /* steer DMA int to local processor */ | |
| DMA_INT_STEER_PCI = 1, /* steer DMA int to PCI bus through INTA_ */ | |
| } DMA_INTERRUPT_STEER; | |
| typedef enum _dma_channel | |
| { | |
| DMA_CHN_0 = 0, /* kahlua has two dma channels: 0 and 1 */ | |
| DMA_CHN_1 = 1, | |
| } DMA_CHANNEL; | |
| typedef enum _dma_snoop_mode | |
| { | |
| DMA_SNOOP_DISABLE = 0, | |
| DMA_SNOOP_ENABLE = 1, | |
| } DMA_SNOOP_MODE; | |
| /******************** App. API ******************** | |
| * The application API is for user level application | |
| * to use the functionality provided by DMA driver. | |
| * This is a "generic" DMA interface, it should contain | |
| * nothing specific to the Kahlua implementation. | |
| * Only the generic functions are exported by the library. | |
| * | |
| * Note: Its App.s responsibility to swap the data | |
| * byte. In our API, we currently transfer whatever | |
| * we are given - Big/Little Endian. This could | |
| * become part of the DMA config, though. | |
| **************************************************/ | |
| /* Initialize DMA unit with the following: | |
| * optional pointer to application layer print function | |
| * | |
| * These parameters may be added: | |
| * ??? | |
| * Interrupt enables, modes, etc. are set for each transfer. | |
| * | |
| * This function must be called before DMA unit can be used. | |
| */ | |
| extern DMA_Status DMA_Initialize( | |
| int (*app_print_function)(char *,...)); /* pointer to optional "printf" | |
| * provided by application | |
| */ | |
| /* Perform the DMA transfer, only direct mode is currently implemented. | |
| * At this point, I think it would be better to define a different | |
| * function for chaining mode. | |
| * Also, I'm not sure if it is appropriate to have the "generic" API | |
| * accept snoop and int_steer parameters. The DINK user interface allows | |
| * them, so for now I'll leave them. | |
| * | |
| * int_steer controls DMA interrupt steering to PCI or local processor | |
| * type is the type of transfer: M2M, M2P, P2M, P2P | |
| * source is the source address of the data | |
| * dest is the destination address of the data | |
| * len is the length of data to transfer | |
| * channel is the DMA channel to use for the transfer | |
| * snoop is the snoop enable control | |
| */ | |
| extern DMA_Status DMA_direct_transfer( DMA_INTERRUPT_STEER int_steer, | |
| DMA_TRANSFER_TYPE type, | |
| unsigned int source, | |
| unsigned int dest, | |
| unsigned int len, | |
| DMA_CHANNEL channel, | |
| DMA_SNOOP_MODE snoop); | |
| #endif |